// $ANTLR 3.4 G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g 2012-11-27 20:42:16

package org.cpar.compiler;

import java.util.Set;
import java.util.HashSet;
import org.cpar.compiler.nodes.*;


import org.antlr.runtime.*;
import java.util.Stack;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.util.HashMap;

import org.antlr.runtime.tree.*;


@SuppressWarnings({"all", "warnings", "unchecked"})
public class SCPARParser extends Parser {
    public static final String[] tokenNames = new String[] {
        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "ADDRESSOF", "ALLOC_PROC", "ALSO", "ARG", "ASGN_BITWISE_AND", "ASGN_BITWISE_OR", "ASGN_BITWISE_XOR", "ASGN_DIVIDE", "ASGN_EQUAL", "ASGN_LSHIFT", "ASGN_MINUS", "ASGN_MOD", "ASGN_PLUS", "ASGN_RSHIFT", "ASGN_TIMES", "AUTO", "BITWISE_NOT", "BITWISE_OR", "BITWISE_XOR", "BLOCK", "BLOCKS", "BODY", "BREAK", "CALL", "CASE", "CDECL", "CHAR", "CHARACTER_LITERAL", "COBEGIN", "COEND", "COMMENT", "CONST", "CONTINUE", "CREATE", "CREATE_EV", "CREATE_SEM", "DECIMAL_LITERAL", "DEFAULT", "DO", "DOUBLE", "ELSE", "ENUM", "EQUALS", "EVENT", "EXTERN", "EscapeSequence", "Exponent", "FLOAT", "FLOATING_POINT_LITERAL", "FOR", "FORALL", "FUNCS", "FloatTypeSuffix", "GOTO", "GREATER_EQUALS", "GREATER_THAN", "HEX_LITERAL", "HexDigit", "IDENTIFIER", "IF", "INDIRECTION", "INITIALIZE", "INT", "INT64", "IntegerTypeSuffix", "LEFT_SHIFT", "LESS_EQUALS", "LESS_THAN", "LETTER", "LINE_COMMAND", "LINE_COMMENT", "LOCK", "LOGICAL_AND", "LOGICAL_OR", "LONG", "MAIN", "MINUS", "MONITOR", "NAMES", "NOT", "NOT_EQUALS", "OCTAL_LITERAL", "OctalEscape", "PARAM", "PARAMS", "PARBEGIN", "PAREND", "PLUS", "READ_EV", "REGISTER", "REMOVE_SEM", "REM_EV", "RES_EV", "RETURN", "RIGHT_SHIFT", "SEMAPH", "SET_EV", "SHARED", "SHORT", "SIGNED", "SPEC", "STATIC", "STRING_LITERAL", "STRUCT", "SWITCH", "TASK", "TO", "TYPEDEF", "TYPES", "UNION", "UNIT", "UNLOCK", "UNSIGNED", "UnicodeEscape", "VARDEF", "VARS", "VECTOR", "VOID", "VOLATILE", "W64", "WAIT_ALL", "WAIT_EV", "WHEN", "WHILE", "WS", "'%'", "'('", "')'", "'++'", "','", "'--'", "'.'", "'/'", "':'", "';'", "'?'", "'['", "']'", "'{'", "'}'"
    };

    public static final int EOF=-1;
    public static final int T__129=129;
    public static final int T__130=130;
    public static final int T__131=131;
    public static final int T__132=132;
    public static final int T__133=133;
    public static final int T__134=134;
    public static final int T__135=135;
    public static final int T__136=136;
    public static final int T__137=137;
    public static final int T__138=138;
    public static final int T__139=139;
    public static final int T__140=140;
    public static final int T__141=141;
    public static final int T__142=142;
    public static final int T__143=143;
    public static final int ADDRESSOF=4;
    public static final int ALLOC_PROC=5;
    public static final int ALSO=6;
    public static final int ARG=7;
    public static final int ASGN_BITWISE_AND=8;
    public static final int ASGN_BITWISE_OR=9;
    public static final int ASGN_BITWISE_XOR=10;
    public static final int ASGN_DIVIDE=11;
    public static final int ASGN_EQUAL=12;
    public static final int ASGN_LSHIFT=13;
    public static final int ASGN_MINUS=14;
    public static final int ASGN_MOD=15;
    public static final int ASGN_PLUS=16;
    public static final int ASGN_RSHIFT=17;
    public static final int ASGN_TIMES=18;
    public static final int AUTO=19;
    public static final int BITWISE_NOT=20;
    public static final int BITWISE_OR=21;
    public static final int BITWISE_XOR=22;
    public static final int BLOCK=23;
    public static final int BLOCKS=24;
    public static final int BODY=25;
    public static final int BREAK=26;
    public static final int CALL=27;
    public static final int CASE=28;
    public static final int CDECL=29;
    public static final int CHAR=30;
    public static final int CHARACTER_LITERAL=31;
    public static final int COBEGIN=32;
    public static final int COEND=33;
    public static final int COMMENT=34;
    public static final int CONST=35;
    public static final int CONTINUE=36;
    public static final int CREATE=37;
    public static final int CREATE_EV=38;
    public static final int CREATE_SEM=39;
    public static final int DECIMAL_LITERAL=40;
    public static final int DEFAULT=41;
    public static final int DO=42;
    public static final int DOUBLE=43;
    public static final int ELSE=44;
    public static final int ENUM=45;
    public static final int EQUALS=46;
    public static final int EVENT=47;
    public static final int EXTERN=48;
    public static final int EscapeSequence=49;
    public static final int Exponent=50;
    public static final int FLOAT=51;
    public static final int FLOATING_POINT_LITERAL=52;
    public static final int FOR=53;
    public static final int FORALL=54;
    public static final int FUNCS=55;
    public static final int FloatTypeSuffix=56;
    public static final int GOTO=57;
    public static final int GREATER_EQUALS=58;
    public static final int GREATER_THAN=59;
    public static final int HEX_LITERAL=60;
    public static final int HexDigit=61;
    public static final int IDENTIFIER=62;
    public static final int IF=63;
    public static final int INDIRECTION=64;
    public static final int INITIALIZE=65;
    public static final int INT=66;
    public static final int INT64=67;
    public static final int IntegerTypeSuffix=68;
    public static final int LEFT_SHIFT=69;
    public static final int LESS_EQUALS=70;
    public static final int LESS_THAN=71;
    public static final int LETTER=72;
    public static final int LINE_COMMAND=73;
    public static final int LINE_COMMENT=74;
    public static final int LOCK=75;
    public static final int LOGICAL_AND=76;
    public static final int LOGICAL_OR=77;
    public static final int LONG=78;
    public static final int MAIN=79;
    public static final int MINUS=80;
    public static final int MONITOR=81;
    public static final int NAMES=82;
    public static final int NOT=83;
    public static final int NOT_EQUALS=84;
    public static final int OCTAL_LITERAL=85;
    public static final int OctalEscape=86;
    public static final int PARAM=87;
    public static final int PARAMS=88;
    public static final int PARBEGIN=89;
    public static final int PAREND=90;
    public static final int PLUS=91;
    public static final int READ_EV=92;
    public static final int REGISTER=93;
    public static final int REMOVE_SEM=94;
    public static final int REM_EV=95;
    public static final int RES_EV=96;
    public static final int RETURN=97;
    public static final int RIGHT_SHIFT=98;
    public static final int SEMAPH=99;
    public static final int SET_EV=100;
    public static final int SHARED=101;
    public static final int SHORT=102;
    public static final int SIGNED=103;
    public static final int SPEC=104;
    public static final int STATIC=105;
    public static final int STRING_LITERAL=106;
    public static final int STRUCT=107;
    public static final int SWITCH=108;
    public static final int TASK=109;
    public static final int TO=110;
    public static final int TYPEDEF=111;
    public static final int TYPES=112;
    public static final int UNION=113;
    public static final int UNIT=114;
    public static final int UNLOCK=115;
    public static final int UNSIGNED=116;
    public static final int UnicodeEscape=117;
    public static final int VARDEF=118;
    public static final int VARS=119;
    public static final int VECTOR=120;
    public static final int VOID=121;
    public static final int VOLATILE=122;
    public static final int W64=123;
    public static final int WAIT_ALL=124;
    public static final int WAIT_EV=125;
    public static final int WHEN=126;
    public static final int WHILE=127;
    public static final int WS=128;

    // delegates
    public Parser[] getDelegates() {
        return new Parser[] {};
    }

    // delegators

    protected static class Symbols_scope {
        Set types;
        // only track types in order to get parser working;
    }
    protected Stack Symbols_stack = new Stack();



    public SCPARParser(TokenStream input) {
        this(input, new RecognizerSharedState());
    }
    public SCPARParser(TokenStream input, RecognizerSharedState state) {
        super(input, state);
        this.state.ruleMemo = new HashMap[202+1];
         

    }

protected TreeAdaptor adaptor = new CommonTreeAdaptor();

public void setTreeAdaptor(TreeAdaptor adaptor) {
    this.adaptor = adaptor;
}
public TreeAdaptor getTreeAdaptor() {
    return adaptor;
}
    public String[] getTokenNames() { return SCPARParser.tokenNames; }
    public String getGrammarFileName() { return "G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g"; }


    	boolean isTypeName(String name) {
    		System.out.print(name);
    		for (int i = Symbols_stack.size()-1; i>=0; i--) {
    			Symbols_scope scope = (Symbols_scope)Symbols_stack.get(i);
    			if ( scope.types.contains(name) ) {
    				return true;
    			}
    		}
    		return false;
    	}


    public static class translation_unit_return extends ParserRuleReturnScope {
        Object tree;
        public Object getTree() { return tree; }
    };


    // $ANTLR start "translation_unit"
    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:54:1: translation_unit : ( external_declaration )+ -> ^( UNIT ( external_declaration )+ ) ;
    public final SCPARParser.translation_unit_return translation_unit() throws RecognitionException {
        Symbols_stack.push(new Symbols_scope());

        SCPARParser.translation_unit_return retval = new SCPARParser.translation_unit_return();
        retval.start = input.LT(1);

        int translation_unit_StartIndex = input.index();

        Object root_0 = null;

        SCPARParser.external_declaration_return external_declaration1 =null;


        RewriteRuleSubtreeStream stream_external_declaration=new RewriteRuleSubtreeStream(adaptor,"rule external_declaration");

        	((Symbols_scope)Symbols_stack.peek()).types = new HashSet();

        try {
            if ( state.backtracking>0 && alreadyParsedRule(input, 1) ) { return retval; }

            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:59:2: ( ( external_declaration )+ -> ^( UNIT ( external_declaration )+ ) )
            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:59:4: ( external_declaration )+
            {
            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:59:4: ( external_declaration )+
            int cnt1=0;
            loop1:
            do {
                int alt1=2;
                int LA1_0 = input.LA(1);

                if ( (LA1_0==AUTO||(LA1_0 >= CDECL && LA1_0 <= CHAR)||LA1_0==CONST||LA1_0==DOUBLE||LA1_0==ENUM||(LA1_0 >= EVENT && LA1_0 <= EXTERN)||LA1_0==FLOAT||LA1_0==IDENTIFIER||(LA1_0 >= INT && LA1_0 <= INT64)||(LA1_0 >= LONG && LA1_0 <= MAIN)||LA1_0==MONITOR||LA1_0==REGISTER||LA1_0==SEMAPH||(LA1_0 >= SHARED && LA1_0 <= SIGNED)||LA1_0==STATIC||LA1_0==STRUCT||LA1_0==TASK||LA1_0==UNION||LA1_0==UNSIGNED||(LA1_0 >= VOID && LA1_0 <= W64)) ) {
                    alt1=1;
                }


                switch (alt1) {
            	case 1 :
            	    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:59:4: external_declaration
            	    {
            	    pushFollow(FOLLOW_external_declaration_in_translation_unit138);
            	    external_declaration1=external_declaration();

            	    state._fsp--;
            	    if (state.failed) return retval;
            	    if ( state.backtracking==0 ) stream_external_declaration.add(external_declaration1.getTree());

            	    }
            	    break;

            	default :
            	    if ( cnt1 >= 1 ) break loop1;
            	    if (state.backtracking>0) {state.failed=true; return retval;}
                        EarlyExitException eee =
                            new EarlyExitException(1, input);
                        throw eee;
                }
                cnt1++;
            } while (true);


            // AST REWRITE
            // elements: external_declaration
            // token labels: 
            // rule labels: retval
            // token list labels: 
            // rule list labels: 
            // wildcard labels: 
            if ( state.backtracking==0 ) {

            retval.tree = root_0;
            RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null);

            root_0 = (Object)adaptor.nil();
            // 59:26: -> ^( UNIT ( external_declaration )+ )
            {
                // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:59:29: ^( UNIT ( external_declaration )+ )
                {
                Object root_1 = (Object)adaptor.nil();
                root_1 = (Object)adaptor.becomeRoot(
                new Unit(UNIT)
                , root_1);

                if ( !(stream_external_declaration.hasNext()) ) {
                    throw new RewriteEarlyExitException();
                }
                while ( stream_external_declaration.hasNext() ) {
                    adaptor.addChild(root_1, stream_external_declaration.nextTree());

                }
                stream_external_declaration.reset();

                adaptor.addChild(root_0, root_1);
                }

            }


            retval.tree = root_0;
            }

            }

            retval.stop = input.LT(-1);


            if ( state.backtracking==0 ) {

            retval.tree = (Object)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }

        finally {
        	// do for sure before leaving
            if ( state.backtracking>0 ) { memoize(input, 1, translation_unit_StartIndex); }

            Symbols_stack.pop();

        }
        return retval;
    }
    // $ANTLR end "translation_unit"


    public static class external_declaration_return extends ParserRuleReturnScope {
        Object tree;
        public Object getTree() { return tree; }
    };


    // $ANTLR start "external_declaration"
    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:62:1: external_declaration : ( var_declaration | task_declaration | c_function | main_function | monitor_block | enum_declaration );
    public final SCPARParser.external_declaration_return external_declaration() throws RecognitionException {
        SCPARParser.external_declaration_return retval = new SCPARParser.external_declaration_return();
        retval.start = input.LT(1);

        int external_declaration_StartIndex = input.index();

        Object root_0 = null;

        SCPARParser.var_declaration_return var_declaration2 =null;

        SCPARParser.task_declaration_return task_declaration3 =null;

        SCPARParser.c_function_return c_function4 =null;

        SCPARParser.main_function_return main_function5 =null;

        SCPARParser.monitor_block_return monitor_block6 =null;

        SCPARParser.enum_declaration_return enum_declaration7 =null;



        try {
            if ( state.backtracking>0 && alreadyParsedRule(input, 2) ) { return retval; }

            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:63:2: ( var_declaration | task_declaration | c_function | main_function | monitor_block | enum_declaration )
            int alt2=6;
            switch ( input.LA(1) ) {
            case AUTO:
            case CDECL:
            case CONST:
            case EXTERN:
            case REGISTER:
            case STATIC:
            case VOLATILE:
                {
                int LA2_1 = input.LA(2);

                if ( (synpred2_SCPAR()) ) {
                    alt2=1;
                }
                else if ( (synpred4_SCPAR()) ) {
                    alt2=3;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return retval;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 2, 1, input);

                    throw nvae;

                }
                }
                break;
            case VOID:
                {
                int LA2_2 = input.LA(2);

                if ( (synpred2_SCPAR()) ) {
                    alt2=1;
                }
                else if ( (synpred4_SCPAR()) ) {
                    alt2=3;
                }
                else if ( (synpred5_SCPAR()) ) {
                    alt2=4;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return retval;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 2, 2, input);

                    throw nvae;

                }
                }
                break;
            case CHAR:
                {
                int LA2_3 = input.LA(2);

                if ( (synpred2_SCPAR()) ) {
                    alt2=1;
                }
                else if ( (synpred4_SCPAR()) ) {
                    alt2=3;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return retval;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 2, 3, input);

                    throw nvae;

                }
                }
                break;
            case SHORT:
                {
                int LA2_4 = input.LA(2);

                if ( (synpred2_SCPAR()) ) {
                    alt2=1;
                }
                else if ( (synpred4_SCPAR()) ) {
                    alt2=3;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return retval;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 2, 4, input);

                    throw nvae;

                }
                }
                break;
            case INT:
                {
                int LA2_5 = input.LA(2);

                if ( (synpred2_SCPAR()) ) {
                    alt2=1;
                }
                else if ( (synpred4_SCPAR()) ) {
                    alt2=3;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return retval;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 2, 5, input);

                    throw nvae;

                }
                }
                break;
            case LONG:
                {
                int LA2_6 = input.LA(2);

                if ( (synpred2_SCPAR()) ) {
                    alt2=1;
                }
                else if ( (synpred4_SCPAR()) ) {
                    alt2=3;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return retval;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 2, 6, input);

                    throw nvae;

                }
                }
                break;
            case FLOAT:
                {
                int LA2_7 = input.LA(2);

                if ( (synpred2_SCPAR()) ) {
                    alt2=1;
                }
                else if ( (synpred4_SCPAR()) ) {
                    alt2=3;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return retval;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 2, 7, input);

                    throw nvae;

                }
                }
                break;
            case DOUBLE:
                {
                int LA2_8 = input.LA(2);

                if ( (synpred2_SCPAR()) ) {
                    alt2=1;
                }
                else if ( (synpred4_SCPAR()) ) {
                    alt2=3;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return retval;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 2, 8, input);

                    throw nvae;

                }
                }
                break;
            case SIGNED:
                {
                int LA2_9 = input.LA(2);

                if ( (synpred2_SCPAR()) ) {
                    alt2=1;
                }
                else if ( (synpred4_SCPAR()) ) {
                    alt2=3;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return retval;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 2, 9, input);

                    throw nvae;

                }
                }
                break;
            case UNSIGNED:
                {
                int LA2_10 = input.LA(2);

                if ( (synpred2_SCPAR()) ) {
                    alt2=1;
                }
                else if ( (synpred4_SCPAR()) ) {
                    alt2=3;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return retval;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 2, 10, input);

                    throw nvae;

                }
                }
                break;
            case W64:
                {
                int LA2_11 = input.LA(2);

                if ( (synpred2_SCPAR()) ) {
                    alt2=1;
                }
                else if ( (synpred4_SCPAR()) ) {
                    alt2=3;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return retval;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 2, 11, input);

                    throw nvae;

                }
                }
                break;
            case INT64:
                {
                int LA2_12 = input.LA(2);

                if ( (synpred2_SCPAR()) ) {
                    alt2=1;
                }
                else if ( (synpred4_SCPAR()) ) {
                    alt2=3;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return retval;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 2, 12, input);

                    throw nvae;

                }
                }
                break;
            case IDENTIFIER:
                {
                int LA2_13 = input.LA(2);

                if ( (((synpred2_SCPAR()&&synpred2_SCPAR())&&(isTypeName(input.LT(1).getText())))) ) {
                    alt2=1;
                }
                else if ( (((synpred4_SCPAR()&&synpred4_SCPAR())&&(isTypeName(input.LT(1).getText())))) ) {
                    alt2=3;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return retval;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 2, 13, input);

                    throw nvae;

                }
                }
                break;
            case SEMAPH:
                {
                int LA2_14 = input.LA(2);

                if ( (synpred2_SCPAR()) ) {
                    alt2=1;
                }
                else if ( (synpred4_SCPAR()) ) {
                    alt2=3;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return retval;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 2, 14, input);

                    throw nvae;

                }
                }
                break;
            case EVENT:
                {
                int LA2_15 = input.LA(2);

                if ( (synpred2_SCPAR()) ) {
                    alt2=1;
                }
                else if ( (synpred4_SCPAR()) ) {
                    alt2=3;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return retval;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 2, 15, input);

                    throw nvae;

                }
                }
                break;
            case STRUCT:
            case UNION:
                {
                int LA2_16 = input.LA(2);

                if ( (synpred2_SCPAR()) ) {
                    alt2=1;
                }
                else if ( (synpred4_SCPAR()) ) {
                    alt2=3;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return retval;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 2, 16, input);

                    throw nvae;

                }
                }
                break;
            case SHARED:
                {
                alt2=1;
                }
                break;
            case TASK:
                {
                alt2=2;
                }
                break;
            case MAIN:
                {
                alt2=4;
                }
                break;
            case MONITOR:
                {
                alt2=5;
                }
                break;
            case ENUM:
                {
                alt2=6;
                }
                break;
            default:
                if (state.backtracking>0) {state.failed=true; return retval;}
                NoViableAltException nvae =
                    new NoViableAltException("", 2, 0, input);

                throw nvae;

            }

            switch (alt2) {
                case 1 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:63:4: var_declaration
                    {
                    root_0 = (Object)adaptor.nil();


                    pushFollow(FOLLOW_var_declaration_in_external_declaration162);
                    var_declaration2=var_declaration();

                    state._fsp--;
                    if (state.failed) return retval;
                    if ( state.backtracking==0 ) adaptor.addChild(root_0, var_declaration2.getTree());

                    }
                    break;
                case 2 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:64:4: task_declaration
                    {
                    root_0 = (Object)adaptor.nil();


                    pushFollow(FOLLOW_task_declaration_in_external_declaration167);
                    task_declaration3=task_declaration();

                    state._fsp--;
                    if (state.failed) return retval;
                    if ( state.backtracking==0 ) adaptor.addChild(root_0, task_declaration3.getTree());

                    }
                    break;
                case 3 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:65:4: c_function
                    {
                    root_0 = (Object)adaptor.nil();


                    pushFollow(FOLLOW_c_function_in_external_declaration172);
                    c_function4=c_function();

                    state._fsp--;
                    if (state.failed) return retval;
                    if ( state.backtracking==0 ) adaptor.addChild(root_0, c_function4.getTree());

                    }
                    break;
                case 4 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:66:4: main_function
                    {
                    root_0 = (Object)adaptor.nil();


                    pushFollow(FOLLOW_main_function_in_external_declaration177);
                    main_function5=main_function();

                    state._fsp--;
                    if (state.failed) return retval;
                    if ( state.backtracking==0 ) adaptor.addChild(root_0, main_function5.getTree());

                    }
                    break;
                case 5 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:67:4: monitor_block
                    {
                    root_0 = (Object)adaptor.nil();


                    pushFollow(FOLLOW_monitor_block_in_external_declaration182);
                    monitor_block6=monitor_block();

                    state._fsp--;
                    if (state.failed) return retval;
                    if ( state.backtracking==0 ) adaptor.addChild(root_0, monitor_block6.getTree());

                    }
                    break;
                case 6 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:68:4: enum_declaration
                    {
                    root_0 = (Object)adaptor.nil();


                    pushFollow(FOLLOW_enum_declaration_in_external_declaration187);
                    enum_declaration7=enum_declaration();

                    state._fsp--;
                    if (state.failed) return retval;
                    if ( state.backtracking==0 ) adaptor.addChild(root_0, enum_declaration7.getTree());

                    }
                    break;

            }
            retval.stop = input.LT(-1);


            if ( state.backtracking==0 ) {

            retval.tree = (Object)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }

        finally {
        	// do for sure before leaving
            if ( state.backtracking>0 ) { memoize(input, 2, external_declaration_StartIndex); }

        }
        return retval;
    }
    // $ANTLR end "external_declaration"


    public static class monitor_block_return extends ParserRuleReturnScope {
        Object tree;
        public Object getTree() { return tree; }
    };


    // $ANTLR start "monitor_block"
    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:71:1: monitor_block : MONITOR IDENTIFIER ( var_declaration )* '{' ( c_function )+ ( '{' statements '}' )? '}' -> ^( MONITOR IDENTIFIER ^( VARS ( var_declaration )* ) ^( FUNCS ( c_function )+ ) ^( INITIALIZE ( statements )? ) ) ;
    public final SCPARParser.monitor_block_return monitor_block() throws RecognitionException {
        SCPARParser.monitor_block_return retval = new SCPARParser.monitor_block_return();
        retval.start = input.LT(1);

        int monitor_block_StartIndex = input.index();

        Object root_0 = null;

        Token MONITOR8=null;
        Token IDENTIFIER9=null;
        Token char_literal11=null;
        Token char_literal13=null;
        Token char_literal15=null;
        Token char_literal16=null;
        SCPARParser.var_declaration_return var_declaration10 =null;

        SCPARParser.c_function_return c_function12 =null;

        SCPARParser.statements_return statements14 =null;


        Object MONITOR8_tree=null;
        Object IDENTIFIER9_tree=null;
        Object char_literal11_tree=null;
        Object char_literal13_tree=null;
        Object char_literal15_tree=null;
        Object char_literal16_tree=null;
        RewriteRuleTokenStream stream_143=new RewriteRuleTokenStream(adaptor,"token 143");
        RewriteRuleTokenStream stream_MONITOR=new RewriteRuleTokenStream(adaptor,"token MONITOR");
        RewriteRuleTokenStream stream_IDENTIFIER=new RewriteRuleTokenStream(adaptor,"token IDENTIFIER");
        RewriteRuleTokenStream stream_142=new RewriteRuleTokenStream(adaptor,"token 142");
        RewriteRuleSubtreeStream stream_statements=new RewriteRuleSubtreeStream(adaptor,"rule statements");
        RewriteRuleSubtreeStream stream_c_function=new RewriteRuleSubtreeStream(adaptor,"rule c_function");
        RewriteRuleSubtreeStream stream_var_declaration=new RewriteRuleSubtreeStream(adaptor,"rule var_declaration");
        try {
            if ( state.backtracking>0 && alreadyParsedRule(input, 3) ) { return retval; }

            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:72:2: ( MONITOR IDENTIFIER ( var_declaration )* '{' ( c_function )+ ( '{' statements '}' )? '}' -> ^( MONITOR IDENTIFIER ^( VARS ( var_declaration )* ) ^( FUNCS ( c_function )+ ) ^( INITIALIZE ( statements )? ) ) )
            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:72:4: MONITOR IDENTIFIER ( var_declaration )* '{' ( c_function )+ ( '{' statements '}' )? '}'
            {
            MONITOR8=(Token)match(input,MONITOR,FOLLOW_MONITOR_in_monitor_block199); if (state.failed) return retval; 
            if ( state.backtracking==0 ) stream_MONITOR.add(MONITOR8);


            IDENTIFIER9=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_monitor_block201); if (state.failed) return retval; 
            if ( state.backtracking==0 ) stream_IDENTIFIER.add(IDENTIFIER9);


            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:72:23: ( var_declaration )*
            loop3:
            do {
                int alt3=2;
                int LA3_0 = input.LA(1);

                if ( (LA3_0==AUTO||(LA3_0 >= CDECL && LA3_0 <= CHAR)||LA3_0==CONST||LA3_0==DOUBLE||(LA3_0 >= EVENT && LA3_0 <= EXTERN)||LA3_0==FLOAT||LA3_0==IDENTIFIER||(LA3_0 >= INT && LA3_0 <= INT64)||LA3_0==LONG||LA3_0==REGISTER||LA3_0==SEMAPH||(LA3_0 >= SHARED && LA3_0 <= SIGNED)||LA3_0==STATIC||LA3_0==STRUCT||LA3_0==UNION||LA3_0==UNSIGNED||(LA3_0 >= VOID && LA3_0 <= W64)) ) {
                    alt3=1;
                }


                switch (alt3) {
            	case 1 :
            	    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:72:23: var_declaration
            	    {
            	    pushFollow(FOLLOW_var_declaration_in_monitor_block203);
            	    var_declaration10=var_declaration();

            	    state._fsp--;
            	    if (state.failed) return retval;
            	    if ( state.backtracking==0 ) stream_var_declaration.add(var_declaration10.getTree());

            	    }
            	    break;

            	default :
            	    break loop3;
                }
            } while (true);


            char_literal11=(Token)match(input,142,FOLLOW_142_in_monitor_block206); if (state.failed) return retval; 
            if ( state.backtracking==0 ) stream_142.add(char_literal11);


            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:72:44: ( c_function )+
            int cnt4=0;
            loop4:
            do {
                int alt4=2;
                int LA4_0 = input.LA(1);

                if ( (LA4_0==AUTO||(LA4_0 >= CDECL && LA4_0 <= CHAR)||LA4_0==CONST||LA4_0==DOUBLE||(LA4_0 >= EVENT && LA4_0 <= EXTERN)||LA4_0==FLOAT||LA4_0==IDENTIFIER||(LA4_0 >= INT && LA4_0 <= INT64)||LA4_0==LONG||LA4_0==REGISTER||LA4_0==SEMAPH||(LA4_0 >= SHORT && LA4_0 <= SIGNED)||LA4_0==STATIC||LA4_0==STRUCT||LA4_0==UNION||LA4_0==UNSIGNED||(LA4_0 >= VOID && LA4_0 <= W64)) ) {
                    alt4=1;
                }


                switch (alt4) {
            	case 1 :
            	    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:72:44: c_function
            	    {
            	    pushFollow(FOLLOW_c_function_in_monitor_block208);
            	    c_function12=c_function();

            	    state._fsp--;
            	    if (state.failed) return retval;
            	    if ( state.backtracking==0 ) stream_c_function.add(c_function12.getTree());

            	    }
            	    break;

            	default :
            	    if ( cnt4 >= 1 ) break loop4;
            	    if (state.backtracking>0) {state.failed=true; return retval;}
                        EarlyExitException eee =
                            new EarlyExitException(4, input);
                        throw eee;
                }
                cnt4++;
            } while (true);


            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:72:56: ( '{' statements '}' )?
            int alt5=2;
            int LA5_0 = input.LA(1);

            if ( (LA5_0==142) ) {
                alt5=1;
            }
            switch (alt5) {
                case 1 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:72:57: '{' statements '}'
                    {
                    char_literal13=(Token)match(input,142,FOLLOW_142_in_monitor_block212); if (state.failed) return retval; 
                    if ( state.backtracking==0 ) stream_142.add(char_literal13);


                    pushFollow(FOLLOW_statements_in_monitor_block214);
                    statements14=statements();

                    state._fsp--;
                    if (state.failed) return retval;
                    if ( state.backtracking==0 ) stream_statements.add(statements14.getTree());

                    char_literal15=(Token)match(input,143,FOLLOW_143_in_monitor_block216); if (state.failed) return retval; 
                    if ( state.backtracking==0 ) stream_143.add(char_literal15);


                    }
                    break;

            }


            char_literal16=(Token)match(input,143,FOLLOW_143_in_monitor_block220); if (state.failed) return retval; 
            if ( state.backtracking==0 ) stream_143.add(char_literal16);


            // AST REWRITE
            // elements: statements, MONITOR, c_function, IDENTIFIER, var_declaration
            // token labels: 
            // rule labels: retval
            // token list labels: 
            // rule list labels: 
            // wildcard labels: 
            if ( state.backtracking==0 ) {

            retval.tree = root_0;
            RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null);

            root_0 = (Object)adaptor.nil();
            // 72:82: -> ^( MONITOR IDENTIFIER ^( VARS ( var_declaration )* ) ^( FUNCS ( c_function )+ ) ^( INITIALIZE ( statements )? ) )
            {
                // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:72:85: ^( MONITOR IDENTIFIER ^( VARS ( var_declaration )* ) ^( FUNCS ( c_function )+ ) ^( INITIALIZE ( statements )? ) )
                {
                Object root_1 = (Object)adaptor.nil();
                root_1 = (Object)adaptor.becomeRoot(
                new MonitorBlock(stream_MONITOR.nextToken())
                , root_1);

                adaptor.addChild(root_1, 
                stream_IDENTIFIER.nextNode()
                );

                // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:72:120: ^( VARS ( var_declaration )* )
                {
                Object root_2 = (Object)adaptor.nil();
                root_2 = (Object)adaptor.becomeRoot(
                (Object)adaptor.create(VARS, "VARS")
                , root_2);

                // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:72:127: ( var_declaration )*
                while ( stream_var_declaration.hasNext() ) {
                    adaptor.addChild(root_2, stream_var_declaration.nextTree());

                }
                stream_var_declaration.reset();

                adaptor.addChild(root_1, root_2);
                }

                // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:72:145: ^( FUNCS ( c_function )+ )
                {
                Object root_2 = (Object)adaptor.nil();
                root_2 = (Object)adaptor.becomeRoot(
                (Object)adaptor.create(FUNCS, "FUNCS")
                , root_2);

                if ( !(stream_c_function.hasNext()) ) {
                    throw new RewriteEarlyExitException();
                }
                while ( stream_c_function.hasNext() ) {
                    adaptor.addChild(root_2, stream_c_function.nextTree());

                }
                stream_c_function.reset();

                adaptor.addChild(root_1, root_2);
                }

                // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:72:166: ^( INITIALIZE ( statements )? )
                {
                Object root_2 = (Object)adaptor.nil();
                root_2 = (Object)adaptor.becomeRoot(
                (Object)adaptor.create(INITIALIZE, "INITIALIZE")
                , root_2);

                // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:72:179: ( statements )?
                if ( stream_statements.hasNext() ) {
                    adaptor.addChild(root_2, stream_statements.nextTree());

                }
                stream_statements.reset();

                adaptor.addChild(root_1, root_2);
                }

                adaptor.addChild(root_0, root_1);
                }

            }


            retval.tree = root_0;
            }

            }

            retval.stop = input.LT(-1);


            if ( state.backtracking==0 ) {

            retval.tree = (Object)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }

        finally {
        	// do for sure before leaving
            if ( state.backtracking>0 ) { memoize(input, 3, monitor_block_StartIndex); }

        }
        return retval;
    }
    // $ANTLR end "monitor_block"


    public static class c_function_return extends ParserRuleReturnScope {
        Object tree;
        public Object getTree() { return tree; }
    };


    // $ANTLR start "c_function"
    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:75:1: c_function : type_declaration IDENTIFIER '(' ( parameter_declarations )? ')' ( ';' | '{' function_body '}' ) -> ^( IDENTIFIER ^( '(' ( parameter_declarations )? ')' ) ^( BODY ( function_body )? ) ^( RETURN type_declaration ) ) ;
    public final SCPARParser.c_function_return c_function() throws RecognitionException {
        SCPARParser.c_function_return retval = new SCPARParser.c_function_return();
        retval.start = input.LT(1);

        int c_function_StartIndex = input.index();

        Object root_0 = null;

        Token IDENTIFIER18=null;
        Token char_literal19=null;
        Token char_literal21=null;
        Token char_literal22=null;
        Token char_literal23=null;
        Token char_literal25=null;
        SCPARParser.type_declaration_return type_declaration17 =null;

        SCPARParser.parameter_declarations_return parameter_declarations20 =null;

        SCPARParser.function_body_return function_body24 =null;


        Object IDENTIFIER18_tree=null;
        Object char_literal19_tree=null;
        Object char_literal21_tree=null;
        Object char_literal22_tree=null;
        Object char_literal23_tree=null;
        Object char_literal25_tree=null;
        RewriteRuleTokenStream stream_143=new RewriteRuleTokenStream(adaptor,"token 143");
        RewriteRuleTokenStream stream_138=new RewriteRuleTokenStream(adaptor,"token 138");
        RewriteRuleTokenStream stream_IDENTIFIER=new RewriteRuleTokenStream(adaptor,"token IDENTIFIER");
        RewriteRuleTokenStream stream_131=new RewriteRuleTokenStream(adaptor,"token 131");
        RewriteRuleTokenStream stream_130=new RewriteRuleTokenStream(adaptor,"token 130");
        RewriteRuleTokenStream stream_142=new RewriteRuleTokenStream(adaptor,"token 142");
        RewriteRuleSubtreeStream stream_parameter_declarations=new RewriteRuleSubtreeStream(adaptor,"rule parameter_declarations");
        RewriteRuleSubtreeStream stream_function_body=new RewriteRuleSubtreeStream(adaptor,"rule function_body");
        RewriteRuleSubtreeStream stream_type_declaration=new RewriteRuleSubtreeStream(adaptor,"rule type_declaration");
        try {
            if ( state.backtracking>0 && alreadyParsedRule(input, 4) ) { return retval; }

            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:76:2: ( type_declaration IDENTIFIER '(' ( parameter_declarations )? ')' ( ';' | '{' function_body '}' ) -> ^( IDENTIFIER ^( '(' ( parameter_declarations )? ')' ) ^( BODY ( function_body )? ) ^( RETURN type_declaration ) ) )
            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:76:4: type_declaration IDENTIFIER '(' ( parameter_declarations )? ')' ( ';' | '{' function_body '}' )
            {
            pushFollow(FOLLOW_type_declaration_in_c_function266);
            type_declaration17=type_declaration();

            state._fsp--;
            if (state.failed) return retval;
            if ( state.backtracking==0 ) stream_type_declaration.add(type_declaration17.getTree());

            IDENTIFIER18=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_c_function268); if (state.failed) return retval; 
            if ( state.backtracking==0 ) stream_IDENTIFIER.add(IDENTIFIER18);


            char_literal19=(Token)match(input,130,FOLLOW_130_in_c_function270); if (state.failed) return retval; 
            if ( state.backtracking==0 ) stream_130.add(char_literal19);


            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:76:36: ( parameter_declarations )?
            int alt6=2;
            int LA6_0 = input.LA(1);

            if ( (LA6_0==AUTO||(LA6_0 >= CDECL && LA6_0 <= CHAR)||LA6_0==CONST||LA6_0==DOUBLE||(LA6_0 >= EVENT && LA6_0 <= EXTERN)||LA6_0==FLOAT||LA6_0==IDENTIFIER||(LA6_0 >= INT && LA6_0 <= INT64)||LA6_0==LONG||LA6_0==REGISTER||LA6_0==SEMAPH||(LA6_0 >= SHORT && LA6_0 <= SIGNED)||LA6_0==STATIC||LA6_0==STRUCT||LA6_0==UNION||LA6_0==UNSIGNED||(LA6_0 >= VOID && LA6_0 <= W64)) ) {
                alt6=1;
            }
            switch (alt6) {
                case 1 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:76:36: parameter_declarations
                    {
                    pushFollow(FOLLOW_parameter_declarations_in_c_function272);
                    parameter_declarations20=parameter_declarations();

                    state._fsp--;
                    if (state.failed) return retval;
                    if ( state.backtracking==0 ) stream_parameter_declarations.add(parameter_declarations20.getTree());

                    }
                    break;

            }


            char_literal21=(Token)match(input,131,FOLLOW_131_in_c_function275); if (state.failed) return retval; 
            if ( state.backtracking==0 ) stream_131.add(char_literal21);


            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:76:64: ( ';' | '{' function_body '}' )
            int alt7=2;
            int LA7_0 = input.LA(1);

            if ( (LA7_0==138) ) {
                alt7=1;
            }
            else if ( (LA7_0==142) ) {
                alt7=2;
            }
            else {
                if (state.backtracking>0) {state.failed=true; return retval;}
                NoViableAltException nvae =
                    new NoViableAltException("", 7, 0, input);

                throw nvae;

            }
            switch (alt7) {
                case 1 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:76:65: ';'
                    {
                    char_literal22=(Token)match(input,138,FOLLOW_138_in_c_function278); if (state.failed) return retval; 
                    if ( state.backtracking==0 ) stream_138.add(char_literal22);


                    }
                    break;
                case 2 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:76:71: '{' function_body '}'
                    {
                    char_literal23=(Token)match(input,142,FOLLOW_142_in_c_function282); if (state.failed) return retval; 
                    if ( state.backtracking==0 ) stream_142.add(char_literal23);


                    pushFollow(FOLLOW_function_body_in_c_function284);
                    function_body24=function_body();

                    state._fsp--;
                    if (state.failed) return retval;
                    if ( state.backtracking==0 ) stream_function_body.add(function_body24.getTree());

                    char_literal25=(Token)match(input,143,FOLLOW_143_in_c_function286); if (state.failed) return retval; 
                    if ( state.backtracking==0 ) stream_143.add(char_literal25);


                    }
                    break;

            }


            // AST REWRITE
            // elements: type_declaration, parameter_declarations, 130, IDENTIFIER, function_body, 131
            // token labels: 
            // rule labels: retval
            // token list labels: 
            // rule list labels: 
            // wildcard labels: 
            if ( state.backtracking==0 ) {

            retval.tree = root_0;
            RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null);

            root_0 = (Object)adaptor.nil();
            // 76:94: -> ^( IDENTIFIER ^( '(' ( parameter_declarations )? ')' ) ^( BODY ( function_body )? ) ^( RETURN type_declaration ) )
            {
                // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:76:97: ^( IDENTIFIER ^( '(' ( parameter_declarations )? ')' ) ^( BODY ( function_body )? ) ^( RETURN type_declaration ) )
                {
                Object root_1 = (Object)adaptor.nil();
                root_1 = (Object)adaptor.becomeRoot(
                new AnsiFunction(stream_IDENTIFIER.nextToken())
                , root_1);

                // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:76:124: ^( '(' ( parameter_declarations )? ')' )
                {
                Object root_2 = (Object)adaptor.nil();
                root_2 = (Object)adaptor.becomeRoot(
                stream_130.nextNode()
                , root_2);

                // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:76:130: ( parameter_declarations )?
                if ( stream_parameter_declarations.hasNext() ) {
                    adaptor.addChild(root_2, stream_parameter_declarations.nextTree());

                }
                stream_parameter_declarations.reset();

                adaptor.addChild(root_2, 
                stream_131.nextNode()
                );

                adaptor.addChild(root_1, root_2);
                }

                // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:76:159: ^( BODY ( function_body )? )
                {
                Object root_2 = (Object)adaptor.nil();
                root_2 = (Object)adaptor.becomeRoot(
                (Object)adaptor.create(BODY, "BODY")
                , root_2);

                // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:76:166: ( function_body )?
                if ( stream_function_body.hasNext() ) {
                    adaptor.addChild(root_2, stream_function_body.nextTree());

                }
                stream_function_body.reset();

                adaptor.addChild(root_1, root_2);
                }

                // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:76:182: ^( RETURN type_declaration )
                {
                Object root_2 = (Object)adaptor.nil();
                root_2 = (Object)adaptor.becomeRoot(
                (Object)adaptor.create(RETURN, "RETURN")
                , root_2);

                adaptor.addChild(root_2, stream_type_declaration.nextTree());

                adaptor.addChild(root_1, root_2);
                }

                adaptor.addChild(root_0, root_1);
                }

            }


            retval.tree = root_0;
            }

            }

            retval.stop = input.LT(-1);


            if ( state.backtracking==0 ) {

            retval.tree = (Object)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }

        finally {
        	// do for sure before leaving
            if ( state.backtracking>0 ) { memoize(input, 4, c_function_StartIndex); }

        }
        return retval;
    }
    // $ANTLR end "c_function"


    public static class main_function_return extends ParserRuleReturnScope {
        Object tree;
        public Object getTree() { return tree; }
    };


    // $ANTLR start "main_function"
    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:79:1: main_function : ( VOID )? MAIN '(' ')' '{' function_body '}' -> ^( MAIN ')' function_body '}' ) ;
    public final SCPARParser.main_function_return main_function() throws RecognitionException {
        SCPARParser.main_function_return retval = new SCPARParser.main_function_return();
        retval.start = input.LT(1);

        int main_function_StartIndex = input.index();

        Object root_0 = null;

        Token VOID26=null;
        Token MAIN27=null;
        Token char_literal28=null;
        Token char_literal29=null;
        Token char_literal30=null;
        Token char_literal32=null;
        SCPARParser.function_body_return function_body31 =null;


        Object VOID26_tree=null;
        Object MAIN27_tree=null;
        Object char_literal28_tree=null;
        Object char_literal29_tree=null;
        Object char_literal30_tree=null;
        Object char_literal32_tree=null;
        RewriteRuleTokenStream stream_143=new RewriteRuleTokenStream(adaptor,"token 143");
        RewriteRuleTokenStream stream_MAIN=new RewriteRuleTokenStream(adaptor,"token MAIN");
        RewriteRuleTokenStream stream_VOID=new RewriteRuleTokenStream(adaptor,"token VOID");
        RewriteRuleTokenStream stream_131=new RewriteRuleTokenStream(adaptor,"token 131");
        RewriteRuleTokenStream stream_130=new RewriteRuleTokenStream(adaptor,"token 130");
        RewriteRuleTokenStream stream_142=new RewriteRuleTokenStream(adaptor,"token 142");
        RewriteRuleSubtreeStream stream_function_body=new RewriteRuleSubtreeStream(adaptor,"rule function_body");
        try {
            if ( state.backtracking>0 && alreadyParsedRule(input, 5) ) { return retval; }

            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:80:2: ( ( VOID )? MAIN '(' ')' '{' function_body '}' -> ^( MAIN ')' function_body '}' ) )
            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:80:4: ( VOID )? MAIN '(' ')' '{' function_body '}'
            {
            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:80:4: ( VOID )?
            int alt8=2;
            int LA8_0 = input.LA(1);

            if ( (LA8_0==VOID) ) {
                alt8=1;
            }
            switch (alt8) {
                case 1 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:80:4: VOID
                    {
                    VOID26=(Token)match(input,VOID,FOLLOW_VOID_in_main_function331); if (state.failed) return retval; 
                    if ( state.backtracking==0 ) stream_VOID.add(VOID26);


                    }
                    break;

            }


            MAIN27=(Token)match(input,MAIN,FOLLOW_MAIN_in_main_function334); if (state.failed) return retval; 
            if ( state.backtracking==0 ) stream_MAIN.add(MAIN27);


            char_literal28=(Token)match(input,130,FOLLOW_130_in_main_function336); if (state.failed) return retval; 
            if ( state.backtracking==0 ) stream_130.add(char_literal28);


            char_literal29=(Token)match(input,131,FOLLOW_131_in_main_function338); if (state.failed) return retval; 
            if ( state.backtracking==0 ) stream_131.add(char_literal29);


            char_literal30=(Token)match(input,142,FOLLOW_142_in_main_function340); if (state.failed) return retval; 
            if ( state.backtracking==0 ) stream_142.add(char_literal30);


            pushFollow(FOLLOW_function_body_in_main_function342);
            function_body31=function_body();

            state._fsp--;
            if (state.failed) return retval;
            if ( state.backtracking==0 ) stream_function_body.add(function_body31.getTree());

            char_literal32=(Token)match(input,143,FOLLOW_143_in_main_function344); if (state.failed) return retval; 
            if ( state.backtracking==0 ) stream_143.add(char_literal32);


            // AST REWRITE
            // elements: MAIN, 143, function_body, 131
            // token labels: 
            // rule labels: retval
            // token list labels: 
            // rule list labels: 
            // wildcard labels: 
            if ( state.backtracking==0 ) {

            retval.tree = root_0;
            RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null);

            root_0 = (Object)adaptor.nil();
            // 80:45: -> ^( MAIN ')' function_body '}' )
            {
                // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:80:48: ^( MAIN ')' function_body '}' )
                {
                Object root_1 = (Object)adaptor.nil();
                root_1 = (Object)adaptor.becomeRoot(
                new MainFunction(stream_MAIN.nextToken())
                , root_1);

                adaptor.addChild(root_1, 
                stream_131.nextNode()
                );

                adaptor.addChild(root_1, stream_function_body.nextTree());

                adaptor.addChild(root_1, 
                stream_143.nextNode()
                );

                adaptor.addChild(root_0, root_1);
                }

            }


            retval.tree = root_0;
            }

            }

            retval.stop = input.LT(-1);


            if ( state.backtracking==0 ) {

            retval.tree = (Object)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }

        finally {
        	// do for sure before leaving
            if ( state.backtracking>0 ) { memoize(input, 5, main_function_StartIndex); }

        }
        return retval;
    }
    // $ANTLR end "main_function"


    public static class task_declaration_return extends ParserRuleReturnScope {
        Object tree;
        public Object getTree() { return tree; }
    };


    // $ANTLR start "task_declaration"
    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:83:1: task_declaration : ( task_spec | task_body );
    public final SCPARParser.task_declaration_return task_declaration() throws RecognitionException {
        SCPARParser.task_declaration_return retval = new SCPARParser.task_declaration_return();
        retval.start = input.LT(1);

        int task_declaration_StartIndex = input.index();

        Object root_0 = null;

        SCPARParser.task_spec_return task_spec33 =null;

        SCPARParser.task_body_return task_body34 =null;



        try {
            if ( state.backtracking>0 && alreadyParsedRule(input, 6) ) { return retval; }

            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:84:2: ( task_spec | task_body )
            int alt9=2;
            int LA9_0 = input.LA(1);

            if ( (LA9_0==TASK) ) {
                int LA9_1 = input.LA(2);

                if ( (LA9_1==SPEC) ) {
                    alt9=1;
                }
                else if ( (LA9_1==BODY) ) {
                    alt9=2;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return retval;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 9, 1, input);

                    throw nvae;

                }
            }
            else {
                if (state.backtracking>0) {state.failed=true; return retval;}
                NoViableAltException nvae =
                    new NoViableAltException("", 9, 0, input);

                throw nvae;

            }
            switch (alt9) {
                case 1 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:84:4: task_spec
                    {
                    root_0 = (Object)adaptor.nil();


                    pushFollow(FOLLOW_task_spec_in_task_declaration372);
                    task_spec33=task_spec();

                    state._fsp--;
                    if (state.failed) return retval;
                    if ( state.backtracking==0 ) adaptor.addChild(root_0, task_spec33.getTree());

                    }
                    break;
                case 2 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:85:4: task_body
                    {
                    root_0 = (Object)adaptor.nil();


                    pushFollow(FOLLOW_task_body_in_task_declaration377);
                    task_body34=task_body();

                    state._fsp--;
                    if (state.failed) return retval;
                    if ( state.backtracking==0 ) adaptor.addChild(root_0, task_body34.getTree());

                    }
                    break;

            }
            retval.stop = input.LT(-1);


            if ( state.backtracking==0 ) {

            retval.tree = (Object)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }

        finally {
        	// do for sure before leaving
            if ( state.backtracking>0 ) { memoize(input, 6, task_declaration_StartIndex); }

        }
        return retval;
    }
    // $ANTLR end "task_declaration"


    public static class task_spec_return extends ParserRuleReturnScope {
        Object tree;
        public Object getTree() { return tree; }
    };


    // $ANTLR start "task_spec"
    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:88:1: task_spec : TASK SPEC IDENTIFIER '(' ( parameter_declarations )? ')' ';' -> ^( TASK ^( IDENTIFIER ( parameter_declarations )? ) '(' ) ;
    public final SCPARParser.task_spec_return task_spec() throws RecognitionException {
        SCPARParser.task_spec_return retval = new SCPARParser.task_spec_return();
        retval.start = input.LT(1);

        int task_spec_StartIndex = input.index();

        Object root_0 = null;

        Token TASK35=null;
        Token SPEC36=null;
        Token IDENTIFIER37=null;
        Token char_literal38=null;
        Token char_literal40=null;
        Token char_literal41=null;
        SCPARParser.parameter_declarations_return parameter_declarations39 =null;


        Object TASK35_tree=null;
        Object SPEC36_tree=null;
        Object IDENTIFIER37_tree=null;
        Object char_literal38_tree=null;
        Object char_literal40_tree=null;
        Object char_literal41_tree=null;
        RewriteRuleTokenStream stream_SPEC=new RewriteRuleTokenStream(adaptor,"token SPEC");
        RewriteRuleTokenStream stream_138=new RewriteRuleTokenStream(adaptor,"token 138");
        RewriteRuleTokenStream stream_TASK=new RewriteRuleTokenStream(adaptor,"token TASK");
        RewriteRuleTokenStream stream_IDENTIFIER=new RewriteRuleTokenStream(adaptor,"token IDENTIFIER");
        RewriteRuleTokenStream stream_131=new RewriteRuleTokenStream(adaptor,"token 131");
        RewriteRuleTokenStream stream_130=new RewriteRuleTokenStream(adaptor,"token 130");
        RewriteRuleSubtreeStream stream_parameter_declarations=new RewriteRuleSubtreeStream(adaptor,"rule parameter_declarations");
        try {
            if ( state.backtracking>0 && alreadyParsedRule(input, 7) ) { return retval; }

            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:89:2: ( TASK SPEC IDENTIFIER '(' ( parameter_declarations )? ')' ';' -> ^( TASK ^( IDENTIFIER ( parameter_declarations )? ) '(' ) )
            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:89:4: TASK SPEC IDENTIFIER '(' ( parameter_declarations )? ')' ';'
            {
            TASK35=(Token)match(input,TASK,FOLLOW_TASK_in_task_spec389); if (state.failed) return retval; 
            if ( state.backtracking==0 ) stream_TASK.add(TASK35);


            SPEC36=(Token)match(input,SPEC,FOLLOW_SPEC_in_task_spec391); if (state.failed) return retval; 
            if ( state.backtracking==0 ) stream_SPEC.add(SPEC36);


            IDENTIFIER37=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_task_spec393); if (state.failed) return retval; 
            if ( state.backtracking==0 ) stream_IDENTIFIER.add(IDENTIFIER37);


            char_literal38=(Token)match(input,130,FOLLOW_130_in_task_spec395); if (state.failed) return retval; 
            if ( state.backtracking==0 ) stream_130.add(char_literal38);


            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:89:29: ( parameter_declarations )?
            int alt10=2;
            int LA10_0 = input.LA(1);

            if ( (LA10_0==AUTO||(LA10_0 >= CDECL && LA10_0 <= CHAR)||LA10_0==CONST||LA10_0==DOUBLE||(LA10_0 >= EVENT && LA10_0 <= EXTERN)||LA10_0==FLOAT||LA10_0==IDENTIFIER||(LA10_0 >= INT && LA10_0 <= INT64)||LA10_0==LONG||LA10_0==REGISTER||LA10_0==SEMAPH||(LA10_0 >= SHORT && LA10_0 <= SIGNED)||LA10_0==STATIC||LA10_0==STRUCT||LA10_0==UNION||LA10_0==UNSIGNED||(LA10_0 >= VOID && LA10_0 <= W64)) ) {
                alt10=1;
            }
            switch (alt10) {
                case 1 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:89:29: parameter_declarations
                    {
                    pushFollow(FOLLOW_parameter_declarations_in_task_spec397);
                    parameter_declarations39=parameter_declarations();

                    state._fsp--;
                    if (state.failed) return retval;
                    if ( state.backtracking==0 ) stream_parameter_declarations.add(parameter_declarations39.getTree());

                    }
                    break;

            }


            char_literal40=(Token)match(input,131,FOLLOW_131_in_task_spec400); if (state.failed) return retval; 
            if ( state.backtracking==0 ) stream_131.add(char_literal40);


            char_literal41=(Token)match(input,138,FOLLOW_138_in_task_spec402); if (state.failed) return retval; 
            if ( state.backtracking==0 ) stream_138.add(char_literal41);


            // AST REWRITE
            // elements: IDENTIFIER, 130, parameter_declarations, TASK
            // token labels: 
            // rule labels: retval
            // token list labels: 
            // rule list labels: 
            // wildcard labels: 
            if ( state.backtracking==0 ) {

            retval.tree = root_0;
            RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null);

            root_0 = (Object)adaptor.nil();
            // 89:61: -> ^( TASK ^( IDENTIFIER ( parameter_declarations )? ) '(' )
            {
                // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:89:64: ^( TASK ^( IDENTIFIER ( parameter_declarations )? ) '(' )
                {
                Object root_1 = (Object)adaptor.nil();
                root_1 = (Object)adaptor.becomeRoot(
                new TaskSpec(stream_TASK.nextToken())
                , root_1);

                // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:89:81: ^( IDENTIFIER ( parameter_declarations )? )
                {
                Object root_2 = (Object)adaptor.nil();
                root_2 = (Object)adaptor.becomeRoot(
                stream_IDENTIFIER.nextNode()
                , root_2);

                // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:89:94: ( parameter_declarations )?
                if ( stream_parameter_declarations.hasNext() ) {
                    adaptor.addChild(root_2, stream_parameter_declarations.nextTree());

                }
                stream_parameter_declarations.reset();

                adaptor.addChild(root_1, root_2);
                }

                adaptor.addChild(root_1, 
                stream_130.nextNode()
                );

                adaptor.addChild(root_0, root_1);
                }

            }


            retval.tree = root_0;
            }

            }

            retval.stop = input.LT(-1);


            if ( state.backtracking==0 ) {

            retval.tree = (Object)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }

        finally {
        	// do for sure before leaving
            if ( state.backtracking>0 ) { memoize(input, 7, task_spec_StartIndex); }

        }
        return retval;
    }
    // $ANTLR end "task_spec"


    public static class task_body_return extends ParserRuleReturnScope {
        Object tree;
        public Object getTree() { return tree; }
    };


    // $ANTLR start "task_body"
    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:92:1: task_body : TASK BODY IDENTIFIER '(' ( parameter_declarations )? ')' '{' function_body '}' -> ^( TASK ^( IDENTIFIER ( parameter_declarations )? ) '(' ^( BODY function_body ) '{' ) ;
    public final SCPARParser.task_body_return task_body() throws RecognitionException {
        SCPARParser.task_body_return retval = new SCPARParser.task_body_return();
        retval.start = input.LT(1);

        int task_body_StartIndex = input.index();

        Object root_0 = null;

        Token TASK42=null;
        Token BODY43=null;
        Token IDENTIFIER44=null;
        Token char_literal45=null;
        Token char_literal47=null;
        Token char_literal48=null;
        Token char_literal50=null;
        SCPARParser.parameter_declarations_return parameter_declarations46 =null;

        SCPARParser.function_body_return function_body49 =null;


        Object TASK42_tree=null;
        Object BODY43_tree=null;
        Object IDENTIFIER44_tree=null;
        Object char_literal45_tree=null;
        Object char_literal47_tree=null;
        Object char_literal48_tree=null;
        Object char_literal50_tree=null;
        RewriteRuleTokenStream stream_143=new RewriteRuleTokenStream(adaptor,"token 143");
        RewriteRuleTokenStream stream_TASK=new RewriteRuleTokenStream(adaptor,"token TASK");
        RewriteRuleTokenStream stream_BODY=new RewriteRuleTokenStream(adaptor,"token BODY");
        RewriteRuleTokenStream stream_IDENTIFIER=new RewriteRuleTokenStream(adaptor,"token IDENTIFIER");
        RewriteRuleTokenStream stream_131=new RewriteRuleTokenStream(adaptor,"token 131");
        RewriteRuleTokenStream stream_130=new RewriteRuleTokenStream(adaptor,"token 130");
        RewriteRuleTokenStream stream_142=new RewriteRuleTokenStream(adaptor,"token 142");
        RewriteRuleSubtreeStream stream_parameter_declarations=new RewriteRuleSubtreeStream(adaptor,"rule parameter_declarations");
        RewriteRuleSubtreeStream stream_function_body=new RewriteRuleSubtreeStream(adaptor,"rule function_body");
        try {
            if ( state.backtracking>0 && alreadyParsedRule(input, 8) ) { return retval; }

            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:93:2: ( TASK BODY IDENTIFIER '(' ( parameter_declarations )? ')' '{' function_body '}' -> ^( TASK ^( IDENTIFIER ( parameter_declarations )? ) '(' ^( BODY function_body ) '{' ) )
            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:93:4: TASK BODY IDENTIFIER '(' ( parameter_declarations )? ')' '{' function_body '}'
            {
            TASK42=(Token)match(input,TASK,FOLLOW_TASK_in_task_body433); if (state.failed) return retval; 
            if ( state.backtracking==0 ) stream_TASK.add(TASK42);


            BODY43=(Token)match(input,BODY,FOLLOW_BODY_in_task_body435); if (state.failed) return retval; 
            if ( state.backtracking==0 ) stream_BODY.add(BODY43);


            IDENTIFIER44=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_task_body437); if (state.failed) return retval; 
            if ( state.backtracking==0 ) stream_IDENTIFIER.add(IDENTIFIER44);


            char_literal45=(Token)match(input,130,FOLLOW_130_in_task_body439); if (state.failed) return retval; 
            if ( state.backtracking==0 ) stream_130.add(char_literal45);


            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:93:29: ( parameter_declarations )?
            int alt11=2;
            int LA11_0 = input.LA(1);

            if ( (LA11_0==AUTO||(LA11_0 >= CDECL && LA11_0 <= CHAR)||LA11_0==CONST||LA11_0==DOUBLE||(LA11_0 >= EVENT && LA11_0 <= EXTERN)||LA11_0==FLOAT||LA11_0==IDENTIFIER||(LA11_0 >= INT && LA11_0 <= INT64)||LA11_0==LONG||LA11_0==REGISTER||LA11_0==SEMAPH||(LA11_0 >= SHORT && LA11_0 <= SIGNED)||LA11_0==STATIC||LA11_0==STRUCT||LA11_0==UNION||LA11_0==UNSIGNED||(LA11_0 >= VOID && LA11_0 <= W64)) ) {
                alt11=1;
            }
            switch (alt11) {
                case 1 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:93:29: parameter_declarations
                    {
                    pushFollow(FOLLOW_parameter_declarations_in_task_body441);
                    parameter_declarations46=parameter_declarations();

                    state._fsp--;
                    if (state.failed) return retval;
                    if ( state.backtracking==0 ) stream_parameter_declarations.add(parameter_declarations46.getTree());

                    }
                    break;

            }


            char_literal47=(Token)match(input,131,FOLLOW_131_in_task_body444); if (state.failed) return retval; 
            if ( state.backtracking==0 ) stream_131.add(char_literal47);


            char_literal48=(Token)match(input,142,FOLLOW_142_in_task_body446); if (state.failed) return retval; 
            if ( state.backtracking==0 ) stream_142.add(char_literal48);


            pushFollow(FOLLOW_function_body_in_task_body448);
            function_body49=function_body();

            state._fsp--;
            if (state.failed) return retval;
            if ( state.backtracking==0 ) stream_function_body.add(function_body49.getTree());

            char_literal50=(Token)match(input,143,FOLLOW_143_in_task_body450); if (state.failed) return retval; 
            if ( state.backtracking==0 ) stream_143.add(char_literal50);


            // AST REWRITE
            // elements: IDENTIFIER, function_body, 130, parameter_declarations, TASK, 142, BODY
            // token labels: 
            // rule labels: retval
            // token list labels: 
            // rule list labels: 
            // wildcard labels: 
            if ( state.backtracking==0 ) {

            retval.tree = root_0;
            RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null);

            root_0 = (Object)adaptor.nil();
            // 93:79: -> ^( TASK ^( IDENTIFIER ( parameter_declarations )? ) '(' ^( BODY function_body ) '{' )
            {
                // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:93:82: ^( TASK ^( IDENTIFIER ( parameter_declarations )? ) '(' ^( BODY function_body ) '{' )
                {
                Object root_1 = (Object)adaptor.nil();
                root_1 = (Object)adaptor.becomeRoot(
                new TaskBody(stream_TASK.nextToken())
                , root_1);

                // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:93:99: ^( IDENTIFIER ( parameter_declarations )? )
                {
                Object root_2 = (Object)adaptor.nil();
                root_2 = (Object)adaptor.becomeRoot(
                stream_IDENTIFIER.nextNode()
                , root_2);

                // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:93:112: ( parameter_declarations )?
                if ( stream_parameter_declarations.hasNext() ) {
                    adaptor.addChild(root_2, stream_parameter_declarations.nextTree());

                }
                stream_parameter_declarations.reset();

                adaptor.addChild(root_1, root_2);
                }

                adaptor.addChild(root_1, 
                stream_130.nextNode()
                );

                // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:93:141: ^( BODY function_body )
                {
                Object root_2 = (Object)adaptor.nil();
                root_2 = (Object)adaptor.becomeRoot(
                stream_BODY.nextNode()
                , root_2);

                adaptor.addChild(root_2, stream_function_body.nextTree());

                adaptor.addChild(root_1, root_2);
                }

                adaptor.addChild(root_1, 
                stream_142.nextNode()
                );

                adaptor.addChild(root_0, root_1);
                }

            }


            retval.tree = root_0;
            }

            }

            retval.stop = input.LT(-1);


            if ( state.backtracking==0 ) {

            retval.tree = (Object)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }

        finally {
        	// do for sure before leaving
            if ( state.backtracking>0 ) { memoize(input, 8, task_body_StartIndex); }

        }
        return retval;
    }
    // $ANTLR end "task_body"


    public static class parameter_declarations_return extends ParserRuleReturnScope {
        Object tree;
        public Object getTree() { return tree; }
    };


    // $ANTLR start "parameter_declarations"
    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:96:1: parameter_declarations : parameter_declaration ( ',' parameter_declaration )* -> ^( PARAMS ( parameter_declaration )+ ) ;
    public final SCPARParser.parameter_declarations_return parameter_declarations() throws RecognitionException {
        SCPARParser.parameter_declarations_return retval = new SCPARParser.parameter_declarations_return();
        retval.start = input.LT(1);

        int parameter_declarations_StartIndex = input.index();

        Object root_0 = null;

        Token char_literal52=null;
        SCPARParser.parameter_declaration_return parameter_declaration51 =null;

        SCPARParser.parameter_declaration_return parameter_declaration53 =null;


        Object char_literal52_tree=null;
        RewriteRuleTokenStream stream_133=new RewriteRuleTokenStream(adaptor,"token 133");
        RewriteRuleSubtreeStream stream_parameter_declaration=new RewriteRuleSubtreeStream(adaptor,"rule parameter_declaration");
        try {
            if ( state.backtracking>0 && alreadyParsedRule(input, 9) ) { return retval; }

            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:97:2: ( parameter_declaration ( ',' parameter_declaration )* -> ^( PARAMS ( parameter_declaration )+ ) )
            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:97:4: parameter_declaration ( ',' parameter_declaration )*
            {
            pushFollow(FOLLOW_parameter_declaration_in_parameter_declarations487);
            parameter_declaration51=parameter_declaration();

            state._fsp--;
            if (state.failed) return retval;
            if ( state.backtracking==0 ) stream_parameter_declaration.add(parameter_declaration51.getTree());

            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:97:27: ( ',' parameter_declaration )*
            loop12:
            do {
                int alt12=2;
                int LA12_0 = input.LA(1);

                if ( (LA12_0==133) ) {
                    alt12=1;
                }


                switch (alt12) {
            	case 1 :
            	    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:97:28: ',' parameter_declaration
            	    {
            	    char_literal52=(Token)match(input,133,FOLLOW_133_in_parameter_declarations491); if (state.failed) return retval; 
            	    if ( state.backtracking==0 ) stream_133.add(char_literal52);


            	    pushFollow(FOLLOW_parameter_declaration_in_parameter_declarations493);
            	    parameter_declaration53=parameter_declaration();

            	    state._fsp--;
            	    if (state.failed) return retval;
            	    if ( state.backtracking==0 ) stream_parameter_declaration.add(parameter_declaration53.getTree());

            	    }
            	    break;

            	default :
            	    break loop12;
                }
            } while (true);


            // AST REWRITE
            // elements: parameter_declaration
            // token labels: 
            // rule labels: retval
            // token list labels: 
            // rule list labels: 
            // wildcard labels: 
            if ( state.backtracking==0 ) {

            retval.tree = root_0;
            RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null);

            root_0 = (Object)adaptor.nil();
            // 97:56: -> ^( PARAMS ( parameter_declaration )+ )
            {
                // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:97:59: ^( PARAMS ( parameter_declaration )+ )
                {
                Object root_1 = (Object)adaptor.nil();
                root_1 = (Object)adaptor.becomeRoot(
                (Object)adaptor.create(PARAMS, "PARAMS")
                , root_1);

                if ( !(stream_parameter_declaration.hasNext()) ) {
                    throw new RewriteEarlyExitException();
                }
                while ( stream_parameter_declaration.hasNext() ) {
                    adaptor.addChild(root_1, stream_parameter_declaration.nextTree());

                }
                stream_parameter_declaration.reset();

                adaptor.addChild(root_0, root_1);
                }

            }


            retval.tree = root_0;
            }

            }

            retval.stop = input.LT(-1);


            if ( state.backtracking==0 ) {

            retval.tree = (Object)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }

        finally {
        	// do for sure before leaving
            if ( state.backtracking>0 ) { memoize(input, 9, parameter_declarations_StartIndex); }

        }
        return retval;
    }
    // $ANTLR end "parameter_declarations"


    public static class parameter_declaration_return extends ParserRuleReturnScope {
        Object tree;
        public Object getTree() { return tree; }
    };


    // $ANTLR start "parameter_declaration"
    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:101:1: parameter_declaration : c_var_declaration -> ^( PARAM c_var_declaration ) ;
    public final SCPARParser.parameter_declaration_return parameter_declaration() throws RecognitionException {
        SCPARParser.parameter_declaration_return retval = new SCPARParser.parameter_declaration_return();
        retval.start = input.LT(1);

        int parameter_declaration_StartIndex = input.index();

        Object root_0 = null;

        SCPARParser.c_var_declaration_return c_var_declaration54 =null;


        RewriteRuleSubtreeStream stream_c_var_declaration=new RewriteRuleSubtreeStream(adaptor,"rule c_var_declaration");
        try {
            if ( state.backtracking>0 && alreadyParsedRule(input, 10) ) { return retval; }

            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:102:2: ( c_var_declaration -> ^( PARAM c_var_declaration ) )
            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:102:4: c_var_declaration
            {
            pushFollow(FOLLOW_c_var_declaration_in_parameter_declaration518);
            c_var_declaration54=c_var_declaration();

            state._fsp--;
            if (state.failed) return retval;
            if ( state.backtracking==0 ) stream_c_var_declaration.add(c_var_declaration54.getTree());

            // AST REWRITE
            // elements: c_var_declaration
            // token labels: 
            // rule labels: retval
            // token list labels: 
            // rule list labels: 
            // wildcard labels: 
            if ( state.backtracking==0 ) {

            retval.tree = root_0;
            RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null);

            root_0 = (Object)adaptor.nil();
            // 102:22: -> ^( PARAM c_var_declaration )
            {
                // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:102:25: ^( PARAM c_var_declaration )
                {
                Object root_1 = (Object)adaptor.nil();
                root_1 = (Object)adaptor.becomeRoot(
                (Object)adaptor.create(PARAM, "PARAM")
                , root_1);

                adaptor.addChild(root_1, stream_c_var_declaration.nextTree());

                adaptor.addChild(root_0, root_1);
                }

            }


            retval.tree = root_0;
            }

            }

            retval.stop = input.LT(-1);


            if ( state.backtracking==0 ) {

            retval.tree = (Object)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }

        finally {
        	// do for sure before leaving
            if ( state.backtracking>0 ) { memoize(input, 10, parameter_declaration_StartIndex); }

        }
        return retval;
    }
    // $ANTLR end "parameter_declaration"


    public static class function_body_return extends ParserRuleReturnScope {
        Object tree;
        public Object getTree() { return tree; }
    };


    // $ANTLR start "function_body"
    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:105:1: function_body : ( var_declaration )* ( statements )? -> ^( VARS ( var_declaration )* ) ^( BODY ( statements )? ) ;
    public final SCPARParser.function_body_return function_body() throws RecognitionException {
        SCPARParser.function_body_return retval = new SCPARParser.function_body_return();
        retval.start = input.LT(1);

        int function_body_StartIndex = input.index();

        Object root_0 = null;

        SCPARParser.var_declaration_return var_declaration55 =null;

        SCPARParser.statements_return statements56 =null;


        RewriteRuleSubtreeStream stream_statements=new RewriteRuleSubtreeStream(adaptor,"rule statements");
        RewriteRuleSubtreeStream stream_var_declaration=new RewriteRuleSubtreeStream(adaptor,"rule var_declaration");
        try {
            if ( state.backtracking>0 && alreadyParsedRule(input, 11) ) { return retval; }

            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:106:2: ( ( var_declaration )* ( statements )? -> ^( VARS ( var_declaration )* ) ^( BODY ( statements )? ) )
            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:106:4: ( var_declaration )* ( statements )?
            {
            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:106:4: ( var_declaration )*
            loop13:
            do {
                int alt13=2;
                alt13 = dfa13.predict(input);
                switch (alt13) {
            	case 1 :
            	    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:106:4: var_declaration
            	    {
            	    pushFollow(FOLLOW_var_declaration_in_function_body538);
            	    var_declaration55=var_declaration();

            	    state._fsp--;
            	    if (state.failed) return retval;
            	    if ( state.backtracking==0 ) stream_var_declaration.add(var_declaration55.getTree());

            	    }
            	    break;

            	default :
            	    break loop13;
                }
            } while (true);


            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:106:21: ( statements )?
            int alt14=2;
            int LA14_0 = input.LA(1);

            if ( ((LA14_0 >= ADDRESSOF && LA14_0 <= ALLOC_PROC)||LA14_0==BITWISE_NOT||(LA14_0 >= CHARACTER_LITERAL && LA14_0 <= COBEGIN)||(LA14_0 >= CREATE && LA14_0 <= DECIMAL_LITERAL)||LA14_0==DO||(LA14_0 >= FLOATING_POINT_LITERAL && LA14_0 <= FORALL)||LA14_0==HEX_LITERAL||(LA14_0 >= IDENTIFIER && LA14_0 <= INDIRECTION)||LA14_0==LOCK||LA14_0==MINUS||LA14_0==NOT||LA14_0==OCTAL_LITERAL||LA14_0==PARBEGIN||(LA14_0 >= PLUS && LA14_0 <= READ_EV)||(LA14_0 >= REMOVE_SEM && LA14_0 <= RETURN)||LA14_0==SET_EV||LA14_0==STRING_LITERAL||LA14_0==UNLOCK||(LA14_0 >= WAIT_ALL && LA14_0 <= WAIT_EV)||LA14_0==WHILE||LA14_0==130||LA14_0==132||LA14_0==134||LA14_0==138||LA14_0==142) ) {
                alt14=1;
            }
            switch (alt14) {
                case 1 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:106:21: statements
                    {
                    pushFollow(FOLLOW_statements_in_function_body541);
                    statements56=statements();

                    state._fsp--;
                    if (state.failed) return retval;
                    if ( state.backtracking==0 ) stream_statements.add(statements56.getTree());

                    }
                    break;

            }


            // AST REWRITE
            // elements: var_declaration, statements
            // token labels: 
            // rule labels: retval
            // token list labels: 
            // rule list labels: 
            // wildcard labels: 
            if ( state.backtracking==0 ) {

            retval.tree = root_0;
            RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null);

            root_0 = (Object)adaptor.nil();
            // 106:33: -> ^( VARS ( var_declaration )* ) ^( BODY ( statements )? )
            {
                // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:106:36: ^( VARS ( var_declaration )* )
                {
                Object root_1 = (Object)adaptor.nil();
                root_1 = (Object)adaptor.becomeRoot(
                new VarDeclarations(VARS)
                , root_1);

                // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:106:60: ( var_declaration )*
                while ( stream_var_declaration.hasNext() ) {
                    adaptor.addChild(root_1, stream_var_declaration.nextTree());

                }
                stream_var_declaration.reset();

                adaptor.addChild(root_0, root_1);
                }

                // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:106:78: ^( BODY ( statements )? )
                {
                Object root_1 = (Object)adaptor.nil();
                root_1 = (Object)adaptor.becomeRoot(
                (Object)adaptor.create(BODY, "BODY")
                , root_1);

                // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:106:85: ( statements )?
                if ( stream_statements.hasNext() ) {
                    adaptor.addChild(root_1, stream_statements.nextTree());

                }
                stream_statements.reset();

                adaptor.addChild(root_0, root_1);
                }

            }


            retval.tree = root_0;
            }

            }

            retval.stop = input.LT(-1);


            if ( state.backtracking==0 ) {

            retval.tree = (Object)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }

        finally {
        	// do for sure before leaving
            if ( state.backtracking>0 ) { memoize(input, 11, function_body_StartIndex); }

        }
        return retval;
    }
    // $ANTLR end "function_body"


    public static class statements_return extends ParserRuleReturnScope {
        Object tree;
        public Object getTree() { return tree; }
    };


    // $ANTLR start "statements"
    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:109:1: statements : ( statement )+ ;
    public final SCPARParser.statements_return statements() throws RecognitionException {
        SCPARParser.statements_return retval = new SCPARParser.statements_return();
        retval.start = input.LT(1);

        int statements_StartIndex = input.index();

        Object root_0 = null;

        SCPARParser.statement_return statement57 =null;



        try {
            if ( state.backtracking>0 && alreadyParsedRule(input, 12) ) { return retval; }

            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:110:2: ( ( statement )+ )
            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:110:4: ( statement )+
            {
            root_0 = (Object)adaptor.nil();


            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:110:4: ( statement )+
            int cnt15=0;
            loop15:
            do {
                int alt15=2;
                int LA15_0 = input.LA(1);

                if ( ((LA15_0 >= ADDRESSOF && LA15_0 <= ALLOC_PROC)||LA15_0==BITWISE_NOT||(LA15_0 >= CHARACTER_LITERAL && LA15_0 <= COBEGIN)||(LA15_0 >= CREATE && LA15_0 <= DECIMAL_LITERAL)||LA15_0==DO||(LA15_0 >= FLOATING_POINT_LITERAL && LA15_0 <= FORALL)||LA15_0==HEX_LITERAL||(LA15_0 >= IDENTIFIER && LA15_0 <= INDIRECTION)||LA15_0==LOCK||LA15_0==MINUS||LA15_0==NOT||LA15_0==OCTAL_LITERAL||LA15_0==PARBEGIN||(LA15_0 >= PLUS && LA15_0 <= READ_EV)||(LA15_0 >= REMOVE_SEM && LA15_0 <= RETURN)||LA15_0==SET_EV||LA15_0==STRING_LITERAL||LA15_0==UNLOCK||(LA15_0 >= WAIT_ALL && LA15_0 <= WAIT_EV)||LA15_0==WHILE||LA15_0==130||LA15_0==132||LA15_0==134||LA15_0==138||LA15_0==142) ) {
                    alt15=1;
                }


                switch (alt15) {
            	case 1 :
            	    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:110:4: statement
            	    {
            	    pushFollow(FOLLOW_statement_in_statements573);
            	    statement57=statement();

            	    state._fsp--;
            	    if (state.failed) return retval;
            	    if ( state.backtracking==0 ) adaptor.addChild(root_0, statement57.getTree());

            	    }
            	    break;

            	default :
            	    if ( cnt15 >= 1 ) break loop15;
            	    if (state.backtracking>0) {state.failed=true; return retval;}
                        EarlyExitException eee =
                            new EarlyExitException(15, input);
                        throw eee;
                }
                cnt15++;
            } while (true);


            }

            retval.stop = input.LT(-1);


            if ( state.backtracking==0 ) {

            retval.tree = (Object)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }

        finally {
        	// do for sure before leaving
            if ( state.backtracking>0 ) { memoize(input, 12, statements_StartIndex); }

        }
        return retval;
    }
    // $ANTLR end "statements"


    public static class statement_return extends ParserRuleReturnScope {
        Object tree;
        public Object getTree() { return tree; }
    };


    // $ANTLR start "statement"
    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:113:1: statement : ( function_call -> ^( CALL function_call ) | parallel_block | assignment_expression | if_statement | for_statement | forall_statement | '{' statements '}' | return_statement | loop_statement | ';' );
    public final SCPARParser.statement_return statement() throws RecognitionException {
        SCPARParser.statement_return retval = new SCPARParser.statement_return();
        retval.start = input.LT(1);

        int statement_StartIndex = input.index();

        Object root_0 = null;

        Token char_literal64=null;
        Token char_literal66=null;
        Token char_literal69=null;
        SCPARParser.function_call_return function_call58 =null;

        SCPARParser.parallel_block_return parallel_block59 =null;

        SCPARParser.assignment_expression_return assignment_expression60 =null;

        SCPARParser.if_statement_return if_statement61 =null;

        SCPARParser.for_statement_return for_statement62 =null;

        SCPARParser.forall_statement_return forall_statement63 =null;

        SCPARParser.statements_return statements65 =null;

        SCPARParser.return_statement_return return_statement67 =null;

        SCPARParser.loop_statement_return loop_statement68 =null;


        Object char_literal64_tree=null;
        Object char_literal66_tree=null;
        Object char_literal69_tree=null;
        RewriteRuleSubtreeStream stream_function_call=new RewriteRuleSubtreeStream(adaptor,"rule function_call");
        try {
            if ( state.backtracking>0 && alreadyParsedRule(input, 13) ) { return retval; }

            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:114:2: ( function_call -> ^( CALL function_call ) | parallel_block | assignment_expression | if_statement | for_statement | forall_statement | '{' statements '}' | return_statement | loop_statement | ';' )
            int alt16=10;
            switch ( input.LA(1) ) {
            case IDENTIFIER:
                {
                int LA16_1 = input.LA(2);

                if ( (synpred20_SCPAR()) ) {
                    alt16=1;
                }
                else if ( (synpred22_SCPAR()) ) {
                    alt16=3;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return retval;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 16, 1, input);

                    throw nvae;

                }
                }
                break;
            case CREATE_SEM:
                {
                int LA16_2 = input.LA(2);

                if ( (synpred20_SCPAR()) ) {
                    alt16=1;
                }
                else if ( (synpred22_SCPAR()) ) {
                    alt16=3;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return retval;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 16, 2, input);

                    throw nvae;

                }
                }
                break;
            case REMOVE_SEM:
                {
                int LA16_3 = input.LA(2);

                if ( (synpred20_SCPAR()) ) {
                    alt16=1;
                }
                else if ( (synpred22_SCPAR()) ) {
                    alt16=3;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return retval;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 16, 3, input);

                    throw nvae;

                }
                }
                break;
            case LOCK:
                {
                int LA16_4 = input.LA(2);

                if ( (synpred20_SCPAR()) ) {
                    alt16=1;
                }
                else if ( (synpred22_SCPAR()) ) {
                    alt16=3;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return retval;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 16, 4, input);

                    throw nvae;

                }
                }
                break;
            case UNLOCK:
                {
                int LA16_5 = input.LA(2);

                if ( (synpred20_SCPAR()) ) {
                    alt16=1;
                }
                else if ( (synpred22_SCPAR()) ) {
                    alt16=3;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return retval;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 16, 5, input);

                    throw nvae;

                }
                }
                break;
            case CREATE_EV:
                {
                int LA16_6 = input.LA(2);

                if ( (synpred20_SCPAR()) ) {
                    alt16=1;
                }
                else if ( (synpred22_SCPAR()) ) {
                    alt16=3;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return retval;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 16, 6, input);

                    throw nvae;

                }
                }
                break;
            case SET_EV:
                {
                int LA16_7 = input.LA(2);

                if ( (synpred20_SCPAR()) ) {
                    alt16=1;
                }
                else if ( (synpred22_SCPAR()) ) {
                    alt16=3;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return retval;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 16, 7, input);

                    throw nvae;

                }
                }
                break;
            case REM_EV:
                {
                int LA16_8 = input.LA(2);

                if ( (synpred20_SCPAR()) ) {
                    alt16=1;
                }
                else if ( (synpred22_SCPAR()) ) {
                    alt16=3;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return retval;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 16, 8, input);

                    throw nvae;

                }
                }
                break;
            case RES_EV:
                {
                int LA16_9 = input.LA(2);

                if ( (synpred20_SCPAR()) ) {
                    alt16=1;
                }
                else if ( (synpred22_SCPAR()) ) {
                    alt16=3;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return retval;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 16, 9, input);

                    throw nvae;

                }
                }
                break;
            case WAIT_EV:
                {
                int LA16_10 = input.LA(2);

                if ( (synpred20_SCPAR()) ) {
                    alt16=1;
                }
                else if ( (synpred22_SCPAR()) ) {
                    alt16=3;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return retval;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 16, 10, input);

                    throw nvae;

                }
                }
                break;
            case READ_EV:
                {
                int LA16_11 = input.LA(2);

                if ( (synpred20_SCPAR()) ) {
                    alt16=1;
                }
                else if ( (synpred22_SCPAR()) ) {
                    alt16=3;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return retval;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 16, 11, input);

                    throw nvae;

                }
                }
                break;
            case ALLOC_PROC:
                {
                int LA16_12 = input.LA(2);

                if ( (synpred20_SCPAR()) ) {
                    alt16=1;
                }
                else if ( (synpred22_SCPAR()) ) {
                    alt16=3;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return retval;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 16, 12, input);

                    throw nvae;

                }
                }
                break;
            case CREATE:
                {
                int LA16_13 = input.LA(2);

                if ( (synpred20_SCPAR()) ) {
                    alt16=1;
                }
                else if ( (synpred22_SCPAR()) ) {
                    alt16=3;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return retval;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 16, 13, input);

                    throw nvae;

                }
                }
                break;
            case WAIT_ALL:
                {
                int LA16_14 = input.LA(2);

                if ( (synpred20_SCPAR()) ) {
                    alt16=1;
                }
                else if ( (synpred22_SCPAR()) ) {
                    alt16=3;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return retval;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 16, 14, input);

                    throw nvae;

                }
                }
                break;
            case COBEGIN:
            case PARBEGIN:
                {
                alt16=2;
                }
                break;
            case ADDRESSOF:
            case BITWISE_NOT:
            case CHARACTER_LITERAL:
            case DECIMAL_LITERAL:
            case FLOATING_POINT_LITERAL:
            case HEX_LITERAL:
            case INDIRECTION:
            case MINUS:
            case NOT:
            case OCTAL_LITERAL:
            case PLUS:
            case STRING_LITERAL:
            case 130:
            case 132:
            case 134:
                {
                alt16=3;
                }
                break;
            case IF:
                {
                alt16=4;
                }
                break;
            case FOR:
                {
                alt16=5;
                }
                break;
            case FORALL:
                {
                alt16=6;
                }
                break;
            case 142:
                {
                alt16=7;
                }
                break;
            case RETURN:
                {
                alt16=8;
                }
                break;
            case DO:
            case WHILE:
                {
                alt16=9;
                }
                break;
            case 138:
                {
                alt16=10;
                }
                break;
            default:
                if (state.backtracking>0) {state.failed=true; return retval;}
                NoViableAltException nvae =
                    new NoViableAltException("", 16, 0, input);

                throw nvae;

            }

            switch (alt16) {
                case 1 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:114:4: function_call
                    {
                    pushFollow(FOLLOW_function_call_in_statement586);
                    function_call58=function_call();

                    state._fsp--;
                    if (state.failed) return retval;
                    if ( state.backtracking==0 ) stream_function_call.add(function_call58.getTree());

                    // AST REWRITE
                    // elements: function_call
                    // token labels: 
                    // rule labels: retval
                    // token list labels: 
                    // rule list labels: 
                    // wildcard labels: 
                    if ( state.backtracking==0 ) {

                    retval.tree = root_0;
                    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null);

                    root_0 = (Object)adaptor.nil();
                    // 114:18: -> ^( CALL function_call )
                    {
                        // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:114:21: ^( CALL function_call )
                        {
                        Object root_1 = (Object)adaptor.nil();
                        root_1 = (Object)adaptor.becomeRoot(
                        (Object)adaptor.create(CALL, "CALL")
                        , root_1);

                        adaptor.addChild(root_1, stream_function_call.nextTree());

                        adaptor.addChild(root_0, root_1);
                        }

                    }


                    retval.tree = root_0;
                    }

                    }
                    break;
                case 2 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:115:4: parallel_block
                    {
                    root_0 = (Object)adaptor.nil();


                    pushFollow(FOLLOW_parallel_block_in_statement599);
                    parallel_block59=parallel_block();

                    state._fsp--;
                    if (state.failed) return retval;
                    if ( state.backtracking==0 ) adaptor.addChild(root_0, parallel_block59.getTree());

                    }
                    break;
                case 3 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:116:4: assignment_expression
                    {
                    root_0 = (Object)adaptor.nil();


                    pushFollow(FOLLOW_assignment_expression_in_statement604);
                    assignment_expression60=assignment_expression();

                    state._fsp--;
                    if (state.failed) return retval;
                    if ( state.backtracking==0 ) adaptor.addChild(root_0, assignment_expression60.getTree());

                    }
                    break;
                case 4 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:117:4: if_statement
                    {
                    root_0 = (Object)adaptor.nil();


                    pushFollow(FOLLOW_if_statement_in_statement610);
                    if_statement61=if_statement();

                    state._fsp--;
                    if (state.failed) return retval;
                    if ( state.backtracking==0 ) adaptor.addChild(root_0, if_statement61.getTree());

                    }
                    break;
                case 5 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:118:4: for_statement
                    {
                    root_0 = (Object)adaptor.nil();


                    pushFollow(FOLLOW_for_statement_in_statement615);
                    for_statement62=for_statement();

                    state._fsp--;
                    if (state.failed) return retval;
                    if ( state.backtracking==0 ) adaptor.addChild(root_0, for_statement62.getTree());

                    }
                    break;
                case 6 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:119:4: forall_statement
                    {
                    root_0 = (Object)adaptor.nil();


                    pushFollow(FOLLOW_forall_statement_in_statement620);
                    forall_statement63=forall_statement();

                    state._fsp--;
                    if (state.failed) return retval;
                    if ( state.backtracking==0 ) adaptor.addChild(root_0, forall_statement63.getTree());

                    }
                    break;
                case 7 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:120:4: '{' statements '}'
                    {
                    root_0 = (Object)adaptor.nil();


                    char_literal64=(Token)match(input,142,FOLLOW_142_in_statement625); if (state.failed) return retval;
                    if ( state.backtracking==0 ) {
                    char_literal64_tree = 
                    (Object)adaptor.create(char_literal64)
                    ;
                    adaptor.addChild(root_0, char_literal64_tree);
                    }

                    pushFollow(FOLLOW_statements_in_statement627);
                    statements65=statements();

                    state._fsp--;
                    if (state.failed) return retval;
                    if ( state.backtracking==0 ) adaptor.addChild(root_0, statements65.getTree());

                    char_literal66=(Token)match(input,143,FOLLOW_143_in_statement629); if (state.failed) return retval;
                    if ( state.backtracking==0 ) {
                    char_literal66_tree = 
                    (Object)adaptor.create(char_literal66)
                    ;
                    adaptor.addChild(root_0, char_literal66_tree);
                    }

                    }
                    break;
                case 8 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:121:4: return_statement
                    {
                    root_0 = (Object)adaptor.nil();


                    pushFollow(FOLLOW_return_statement_in_statement634);
                    return_statement67=return_statement();

                    state._fsp--;
                    if (state.failed) return retval;
                    if ( state.backtracking==0 ) adaptor.addChild(root_0, return_statement67.getTree());

                    }
                    break;
                case 9 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:122:4: loop_statement
                    {
                    root_0 = (Object)adaptor.nil();


                    pushFollow(FOLLOW_loop_statement_in_statement639);
                    loop_statement68=loop_statement();

                    state._fsp--;
                    if (state.failed) return retval;
                    if ( state.backtracking==0 ) adaptor.addChild(root_0, loop_statement68.getTree());

                    }
                    break;
                case 10 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:123:4: ';'
                    {
                    root_0 = (Object)adaptor.nil();


                    char_literal69=(Token)match(input,138,FOLLOW_138_in_statement644); if (state.failed) return retval;
                    if ( state.backtracking==0 ) {
                    char_literal69_tree = 
                    (Object)adaptor.create(char_literal69)
                    ;
                    adaptor.addChild(root_0, char_literal69_tree);
                    }

                    }
                    break;

            }
            retval.stop = input.LT(-1);


            if ( state.backtracking==0 ) {

            retval.tree = (Object)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }

        finally {
        	// do for sure before leaving
            if ( state.backtracking>0 ) { memoize(input, 13, statement_StartIndex); }

        }
        return retval;
    }
    // $ANTLR end "statement"


    public static class loop_statement_return extends ParserRuleReturnScope {
        Object tree;
        public Object getTree() { return tree; }
    };


    // $ANTLR start "loop_statement"
    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:126:1: loop_statement : ( DO statement WHILE '(' expression ')' | WHILE '(' assignment_expression ')' statement );
    public final SCPARParser.loop_statement_return loop_statement() throws RecognitionException {
        SCPARParser.loop_statement_return retval = new SCPARParser.loop_statement_return();
        retval.start = input.LT(1);

        int loop_statement_StartIndex = input.index();

        Object root_0 = null;

        Token DO70=null;
        Token WHILE72=null;
        Token char_literal73=null;
        Token char_literal75=null;
        Token WHILE76=null;
        Token char_literal77=null;
        Token char_literal79=null;
        SCPARParser.statement_return statement71 =null;

        SCPARParser.expression_return expression74 =null;

        SCPARParser.assignment_expression_return assignment_expression78 =null;

        SCPARParser.statement_return statement80 =null;


        Object DO70_tree=null;
        Object WHILE72_tree=null;
        Object char_literal73_tree=null;
        Object char_literal75_tree=null;
        Object WHILE76_tree=null;
        Object char_literal77_tree=null;
        Object char_literal79_tree=null;

        try {
            if ( state.backtracking>0 && alreadyParsedRule(input, 14) ) { return retval; }

            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:127:2: ( DO statement WHILE '(' expression ')' | WHILE '(' assignment_expression ')' statement )
            int alt17=2;
            int LA17_0 = input.LA(1);

            if ( (LA17_0==DO) ) {
                alt17=1;
            }
            else if ( (LA17_0==WHILE) ) {
                alt17=2;
            }
            else {
                if (state.backtracking>0) {state.failed=true; return retval;}
                NoViableAltException nvae =
                    new NoViableAltException("", 17, 0, input);

                throw nvae;

            }
            switch (alt17) {
                case 1 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:127:4: DO statement WHILE '(' expression ')'
                    {
                    root_0 = (Object)adaptor.nil();


                    DO70=(Token)match(input,DO,FOLLOW_DO_in_loop_statement656); if (state.failed) return retval;
                    if ( state.backtracking==0 ) {
                    DO70_tree = 
                    (Object)adaptor.create(DO70)
                    ;
                    adaptor.addChild(root_0, DO70_tree);
                    }

                    pushFollow(FOLLOW_statement_in_loop_statement658);
                    statement71=statement();

                    state._fsp--;
                    if (state.failed) return retval;
                    if ( state.backtracking==0 ) adaptor.addChild(root_0, statement71.getTree());

                    WHILE72=(Token)match(input,WHILE,FOLLOW_WHILE_in_loop_statement660); if (state.failed) return retval;
                    if ( state.backtracking==0 ) {
                    WHILE72_tree = 
                    (Object)adaptor.create(WHILE72)
                    ;
                    adaptor.addChild(root_0, WHILE72_tree);
                    }

                    char_literal73=(Token)match(input,130,FOLLOW_130_in_loop_statement662); if (state.failed) return retval;
                    if ( state.backtracking==0 ) {
                    char_literal73_tree = 
                    (Object)adaptor.create(char_literal73)
                    ;
                    adaptor.addChild(root_0, char_literal73_tree);
                    }

                    pushFollow(FOLLOW_expression_in_loop_statement664);
                    expression74=expression();

                    state._fsp--;
                    if (state.failed) return retval;
                    if ( state.backtracking==0 ) adaptor.addChild(root_0, expression74.getTree());

                    char_literal75=(Token)match(input,131,FOLLOW_131_in_loop_statement666); if (state.failed) return retval;
                    if ( state.backtracking==0 ) {
                    char_literal75_tree = 
                    (Object)adaptor.create(char_literal75)
                    ;
                    adaptor.addChild(root_0, char_literal75_tree);
                    }

                    }
                    break;
                case 2 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:128:4: WHILE '(' assignment_expression ')' statement
                    {
                    root_0 = (Object)adaptor.nil();


                    WHILE76=(Token)match(input,WHILE,FOLLOW_WHILE_in_loop_statement671); if (state.failed) return retval;
                    if ( state.backtracking==0 ) {
                    WHILE76_tree = 
                    (Object)adaptor.create(WHILE76)
                    ;
                    adaptor.addChild(root_0, WHILE76_tree);
                    }

                    char_literal77=(Token)match(input,130,FOLLOW_130_in_loop_statement673); if (state.failed) return retval;
                    if ( state.backtracking==0 ) {
                    char_literal77_tree = 
                    (Object)adaptor.create(char_literal77)
                    ;
                    adaptor.addChild(root_0, char_literal77_tree);
                    }

                    pushFollow(FOLLOW_assignment_expression_in_loop_statement675);
                    assignment_expression78=assignment_expression();

                    state._fsp--;
                    if (state.failed) return retval;
                    if ( state.backtracking==0 ) adaptor.addChild(root_0, assignment_expression78.getTree());

                    char_literal79=(Token)match(input,131,FOLLOW_131_in_loop_statement677); if (state.failed) return retval;
                    if ( state.backtracking==0 ) {
                    char_literal79_tree = 
                    (Object)adaptor.create(char_literal79)
                    ;
                    adaptor.addChild(root_0, char_literal79_tree);
                    }

                    pushFollow(FOLLOW_statement_in_loop_statement679);
                    statement80=statement();

                    state._fsp--;
                    if (state.failed) return retval;
                    if ( state.backtracking==0 ) adaptor.addChild(root_0, statement80.getTree());

                    }
                    break;

            }
            retval.stop = input.LT(-1);


            if ( state.backtracking==0 ) {

            retval.tree = (Object)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }

        finally {
        	// do for sure before leaving
            if ( state.backtracking>0 ) { memoize(input, 14, loop_statement_StartIndex); }

        }
        return retval;
    }
    // $ANTLR end "loop_statement"


    public static class return_statement_return extends ParserRuleReturnScope {
        Object tree;
        public Object getTree() { return tree; }
    };


    // $ANTLR start "return_statement"
    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:131:1: return_statement : RETURN ( expression )? ;
    public final SCPARParser.return_statement_return return_statement() throws RecognitionException {
        SCPARParser.return_statement_return retval = new SCPARParser.return_statement_return();
        retval.start = input.LT(1);

        int return_statement_StartIndex = input.index();

        Object root_0 = null;

        Token RETURN81=null;
        SCPARParser.expression_return expression82 =null;


        Object RETURN81_tree=null;

        try {
            if ( state.backtracking>0 && alreadyParsedRule(input, 15) ) { return retval; }

            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:132:2: ( RETURN ( expression )? )
            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:132:4: RETURN ( expression )?
            {
            root_0 = (Object)adaptor.nil();


            RETURN81=(Token)match(input,RETURN,FOLLOW_RETURN_in_return_statement693); if (state.failed) return retval;
            if ( state.backtracking==0 ) {
            RETURN81_tree = 
            (Object)adaptor.create(RETURN81)
            ;
            adaptor.addChild(root_0, RETURN81_tree);
            }

            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:132:11: ( expression )?
            int alt18=2;
            switch ( input.LA(1) ) {
                case 132:
                case 134:
                    {
                    int LA18_1 = input.LA(2);

                    if ( (synpred30_SCPAR()) ) {
                        alt18=1;
                    }
                    }
                    break;
                case ADDRESSOF:
                case BITWISE_NOT:
                case INDIRECTION:
                case MINUS:
                case NOT:
                case PLUS:
                    {
                    int LA18_2 = input.LA(2);

                    if ( (synpred30_SCPAR()) ) {
                        alt18=1;
                    }
                    }
                    break;
                case HEX_LITERAL:
                    {
                    int LA18_3 = input.LA(2);

                    if ( (synpred30_SCPAR()) ) {
                        alt18=1;
                    }
                    }
                    break;
                case OCTAL_LITERAL:
                    {
                    int LA18_4 = input.LA(2);

                    if ( (synpred30_SCPAR()) ) {
                        alt18=1;
                    }
                    }
                    break;
                case DECIMAL_LITERAL:
                    {
                    int LA18_5 = input.LA(2);

                    if ( (synpred30_SCPAR()) ) {
                        alt18=1;
                    }
                    }
                    break;
                case CHARACTER_LITERAL:
                    {
                    int LA18_6 = input.LA(2);

                    if ( (synpred30_SCPAR()) ) {
                        alt18=1;
                    }
                    }
                    break;
                case STRING_LITERAL:
                    {
                    int LA18_7 = input.LA(2);

                    if ( (synpred30_SCPAR()) ) {
                        alt18=1;
                    }
                    }
                    break;
                case FLOATING_POINT_LITERAL:
                    {
                    int LA18_8 = input.LA(2);

                    if ( (synpred30_SCPAR()) ) {
                        alt18=1;
                    }
                    }
                    break;
                case 130:
                    {
                    int LA18_9 = input.LA(2);

                    if ( (synpred30_SCPAR()) ) {
                        alt18=1;
                    }
                    }
                    break;
                case IDENTIFIER:
                    {
                    int LA18_10 = input.LA(2);

                    if ( (synpred30_SCPAR()) ) {
                        alt18=1;
                    }
                    }
                    break;
                case CREATE_SEM:
                    {
                    int LA18_11 = input.LA(2);

                    if ( (synpred30_SCPAR()) ) {
                        alt18=1;
                    }
                    }
                    break;
                case REMOVE_SEM:
                    {
                    int LA18_12 = input.LA(2);

                    if ( (synpred30_SCPAR()) ) {
                        alt18=1;
                    }
                    }
                    break;
                case LOCK:
                    {
                    int LA18_13 = input.LA(2);

                    if ( (synpred30_SCPAR()) ) {
                        alt18=1;
                    }
                    }
                    break;
                case UNLOCK:
                    {
                    int LA18_14 = input.LA(2);

                    if ( (synpred30_SCPAR()) ) {
                        alt18=1;
                    }
                    }
                    break;
                case CREATE_EV:
                    {
                    int LA18_15 = input.LA(2);

                    if ( (synpred30_SCPAR()) ) {
                        alt18=1;
                    }
                    }
                    break;
                case SET_EV:
                    {
                    int LA18_16 = input.LA(2);

                    if ( (synpred30_SCPAR()) ) {
                        alt18=1;
                    }
                    }
                    break;
                case REM_EV:
                    {
                    int LA18_17 = input.LA(2);

                    if ( (synpred30_SCPAR()) ) {
                        alt18=1;
                    }
                    }
                    break;
                case RES_EV:
                    {
                    int LA18_18 = input.LA(2);

                    if ( (synpred30_SCPAR()) ) {
                        alt18=1;
                    }
                    }
                    break;
                case WAIT_EV:
                    {
                    int LA18_19 = input.LA(2);

                    if ( (synpred30_SCPAR()) ) {
                        alt18=1;
                    }
                    }
                    break;
                case READ_EV:
                    {
                    int LA18_20 = input.LA(2);

                    if ( (synpred30_SCPAR()) ) {
                        alt18=1;
                    }
                    }
                    break;
                case ALLOC_PROC:
                    {
                    int LA18_21 = input.LA(2);

                    if ( (synpred30_SCPAR()) ) {
                        alt18=1;
                    }
                    }
                    break;
                case CREATE:
                    {
                    int LA18_22 = input.LA(2);

                    if ( (synpred30_SCPAR()) ) {
                        alt18=1;
                    }
                    }
                    break;
                case WAIT_ALL:
                    {
                    int LA18_23 = input.LA(2);

                    if ( (synpred30_SCPAR()) ) {
                        alt18=1;
                    }
                    }
                    break;
            }

            switch (alt18) {
                case 1 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:132:11: expression
                    {
                    pushFollow(FOLLOW_expression_in_return_statement695);
                    expression82=expression();

                    state._fsp--;
                    if (state.failed) return retval;
                    if ( state.backtracking==0 ) adaptor.addChild(root_0, expression82.getTree());

                    }
                    break;

            }


            }

            retval.stop = input.LT(-1);


            if ( state.backtracking==0 ) {

            retval.tree = (Object)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }

        finally {
        	// do for sure before leaving
            if ( state.backtracking>0 ) { memoize(input, 15, return_statement_StartIndex); }

        }
        return retval;
    }
    // $ANTLR end "return_statement"


    public static class parallel_block_return extends ParserRuleReturnScope {
        Object tree;
        public Object getTree() { return tree; }
    };


    // $ANTLR start "parallel_block"
    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:135:1: parallel_block : ( COBEGIN statements ( ALSO statements )+ COEND -> ^( COBEGIN ^( BLOCKS ( ^( ALSO statements ) )+ ) COEND ) | PARBEGIN statements ( ALSO statements )+ PAREND -> ^( PARBEGIN ^( BLOCKS ( ^( ALSO statements ) )+ ) PAREND ) );
    public final SCPARParser.parallel_block_return parallel_block() throws RecognitionException {
        SCPARParser.parallel_block_return retval = new SCPARParser.parallel_block_return();
        retval.start = input.LT(1);

        int parallel_block_StartIndex = input.index();

        Object root_0 = null;

        Token COBEGIN83=null;
        Token ALSO85=null;
        Token COEND87=null;
        Token PARBEGIN88=null;
        Token ALSO90=null;
        Token PAREND92=null;
        SCPARParser.statements_return statements84 =null;

        SCPARParser.statements_return statements86 =null;

        SCPARParser.statements_return statements89 =null;

        SCPARParser.statements_return statements91 =null;


        Object COBEGIN83_tree=null;
        Object ALSO85_tree=null;
        Object COEND87_tree=null;
        Object PARBEGIN88_tree=null;
        Object ALSO90_tree=null;
        Object PAREND92_tree=null;
        RewriteRuleTokenStream stream_PAREND=new RewriteRuleTokenStream(adaptor,"token PAREND");
        RewriteRuleTokenStream stream_PARBEGIN=new RewriteRuleTokenStream(adaptor,"token PARBEGIN");
        RewriteRuleTokenStream stream_COBEGIN=new RewriteRuleTokenStream(adaptor,"token COBEGIN");
        RewriteRuleTokenStream stream_COEND=new RewriteRuleTokenStream(adaptor,"token COEND");
        RewriteRuleTokenStream stream_ALSO=new RewriteRuleTokenStream(adaptor,"token ALSO");
        RewriteRuleSubtreeStream stream_statements=new RewriteRuleSubtreeStream(adaptor,"rule statements");
        try {
            if ( state.backtracking>0 && alreadyParsedRule(input, 16) ) { return retval; }

            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:136:2: ( COBEGIN statements ( ALSO statements )+ COEND -> ^( COBEGIN ^( BLOCKS ( ^( ALSO statements ) )+ ) COEND ) | PARBEGIN statements ( ALSO statements )+ PAREND -> ^( PARBEGIN ^( BLOCKS ( ^( ALSO statements ) )+ ) PAREND ) )
            int alt21=2;
            int LA21_0 = input.LA(1);

            if ( (LA21_0==COBEGIN) ) {
                alt21=1;
            }
            else if ( (LA21_0==PARBEGIN) ) {
                alt21=2;
            }
            else {
                if (state.backtracking>0) {state.failed=true; return retval;}
                NoViableAltException nvae =
                    new NoViableAltException("", 21, 0, input);

                throw nvae;

            }
            switch (alt21) {
                case 1 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:136:4: COBEGIN statements ( ALSO statements )+ COEND
                    {
                    COBEGIN83=(Token)match(input,COBEGIN,FOLLOW_COBEGIN_in_parallel_block709); if (state.failed) return retval; 
                    if ( state.backtracking==0 ) stream_COBEGIN.add(COBEGIN83);


                    pushFollow(FOLLOW_statements_in_parallel_block711);
                    statements84=statements();

                    state._fsp--;
                    if (state.failed) return retval;
                    if ( state.backtracking==0 ) stream_statements.add(statements84.getTree());

                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:136:23: ( ALSO statements )+
                    int cnt19=0;
                    loop19:
                    do {
                        int alt19=2;
                        int LA19_0 = input.LA(1);

                        if ( (LA19_0==ALSO) ) {
                            alt19=1;
                        }


                        switch (alt19) {
                    	case 1 :
                    	    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:136:24: ALSO statements
                    	    {
                    	    ALSO85=(Token)match(input,ALSO,FOLLOW_ALSO_in_parallel_block714); if (state.failed) return retval; 
                    	    if ( state.backtracking==0 ) stream_ALSO.add(ALSO85);


                    	    pushFollow(FOLLOW_statements_in_parallel_block716);
                    	    statements86=statements();

                    	    state._fsp--;
                    	    if (state.failed) return retval;
                    	    if ( state.backtracking==0 ) stream_statements.add(statements86.getTree());

                    	    }
                    	    break;

                    	default :
                    	    if ( cnt19 >= 1 ) break loop19;
                    	    if (state.backtracking>0) {state.failed=true; return retval;}
                                EarlyExitException eee =
                                    new EarlyExitException(19, input);
                                throw eee;
                        }
                        cnt19++;
                    } while (true);


                    COEND87=(Token)match(input,COEND,FOLLOW_COEND_in_parallel_block720); if (state.failed) return retval; 
                    if ( state.backtracking==0 ) stream_COEND.add(COEND87);


                    // AST REWRITE
                    // elements: COEND, ALSO, statements, COBEGIN
                    // token labels: 
                    // rule labels: retval
                    // token list labels: 
                    // rule list labels: 
                    // wildcard labels: 
                    if ( state.backtracking==0 ) {

                    retval.tree = root_0;
                    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null);

                    root_0 = (Object)adaptor.nil();
                    // 136:48: -> ^( COBEGIN ^( BLOCKS ( ^( ALSO statements ) )+ ) COEND )
                    {
                        // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:136:51: ^( COBEGIN ^( BLOCKS ( ^( ALSO statements ) )+ ) COEND )
                        {
                        Object root_1 = (Object)adaptor.nil();
                        root_1 = (Object)adaptor.becomeRoot(
                        new ParallelBlock(stream_COBEGIN.nextToken())
                        , root_1);

                        // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:136:76: ^( BLOCKS ( ^( ALSO statements ) )+ )
                        {
                        Object root_2 = (Object)adaptor.nil();
                        root_2 = (Object)adaptor.becomeRoot(
                        (Object)adaptor.create(BLOCKS, "BLOCKS")
                        , root_2);

                        if ( !(stream_ALSO.hasNext()||stream_statements.hasNext()) ) {
                            throw new RewriteEarlyExitException();
                        }
                        while ( stream_ALSO.hasNext()||stream_statements.hasNext() ) {
                            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:136:85: ^( ALSO statements )
                            {
                            Object root_3 = (Object)adaptor.nil();
                            root_3 = (Object)adaptor.becomeRoot(
                            stream_ALSO.nextNode()
                            , root_3);

                            adaptor.addChild(root_3, stream_statements.nextTree());

                            adaptor.addChild(root_2, root_3);
                            }

                        }
                        stream_ALSO.reset();
                        stream_statements.reset();

                        adaptor.addChild(root_1, root_2);
                        }

                        adaptor.addChild(root_1, 
                        stream_COEND.nextNode()
                        );

                        adaptor.addChild(root_0, root_1);
                        }

                    }


                    retval.tree = root_0;
                    }

                    }
                    break;
                case 2 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:137:4: PARBEGIN statements ( ALSO statements )+ PAREND
                    {
                    PARBEGIN88=(Token)match(input,PARBEGIN,FOLLOW_PARBEGIN_in_parallel_block747); if (state.failed) return retval; 
                    if ( state.backtracking==0 ) stream_PARBEGIN.add(PARBEGIN88);


                    pushFollow(FOLLOW_statements_in_parallel_block749);
                    statements89=statements();

                    state._fsp--;
                    if (state.failed) return retval;
                    if ( state.backtracking==0 ) stream_statements.add(statements89.getTree());

                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:137:24: ( ALSO statements )+
                    int cnt20=0;
                    loop20:
                    do {
                        int alt20=2;
                        int LA20_0 = input.LA(1);

                        if ( (LA20_0==ALSO) ) {
                            alt20=1;
                        }


                        switch (alt20) {
                    	case 1 :
                    	    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:137:25: ALSO statements
                    	    {
                    	    ALSO90=(Token)match(input,ALSO,FOLLOW_ALSO_in_parallel_block752); if (state.failed) return retval; 
                    	    if ( state.backtracking==0 ) stream_ALSO.add(ALSO90);


                    	    pushFollow(FOLLOW_statements_in_parallel_block754);
                    	    statements91=statements();

                    	    state._fsp--;
                    	    if (state.failed) return retval;
                    	    if ( state.backtracking==0 ) stream_statements.add(statements91.getTree());

                    	    }
                    	    break;

                    	default :
                    	    if ( cnt20 >= 1 ) break loop20;
                    	    if (state.backtracking>0) {state.failed=true; return retval;}
                                EarlyExitException eee =
                                    new EarlyExitException(20, input);
                                throw eee;
                        }
                        cnt20++;
                    } while (true);


                    PAREND92=(Token)match(input,PAREND,FOLLOW_PAREND_in_parallel_block758); if (state.failed) return retval; 
                    if ( state.backtracking==0 ) stream_PAREND.add(PAREND92);


                    // AST REWRITE
                    // elements: PAREND, statements, ALSO, PARBEGIN
                    // token labels: 
                    // rule labels: retval
                    // token list labels: 
                    // rule list labels: 
                    // wildcard labels: 
                    if ( state.backtracking==0 ) {

                    retval.tree = root_0;
                    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null);

                    root_0 = (Object)adaptor.nil();
                    // 137:50: -> ^( PARBEGIN ^( BLOCKS ( ^( ALSO statements ) )+ ) PAREND )
                    {
                        // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:137:53: ^( PARBEGIN ^( BLOCKS ( ^( ALSO statements ) )+ ) PAREND )
                        {
                        Object root_1 = (Object)adaptor.nil();
                        root_1 = (Object)adaptor.becomeRoot(
                        new MicroBlock(stream_PARBEGIN.nextToken())
                        , root_1);

                        // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:137:76: ^( BLOCKS ( ^( ALSO statements ) )+ )
                        {
                        Object root_2 = (Object)adaptor.nil();
                        root_2 = (Object)adaptor.becomeRoot(
                        (Object)adaptor.create(BLOCKS, "BLOCKS")
                        , root_2);

                        if ( !(stream_statements.hasNext()||stream_ALSO.hasNext()) ) {
                            throw new RewriteEarlyExitException();
                        }
                        while ( stream_statements.hasNext()||stream_ALSO.hasNext() ) {
                            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:137:85: ^( ALSO statements )
                            {
                            Object root_3 = (Object)adaptor.nil();
                            root_3 = (Object)adaptor.becomeRoot(
                            stream_ALSO.nextNode()
                            , root_3);

                            adaptor.addChild(root_3, stream_statements.nextTree());

                            adaptor.addChild(root_2, root_3);
                            }

                        }
                        stream_statements.reset();
                        stream_ALSO.reset();

                        adaptor.addChild(root_1, root_2);
                        }

                        adaptor.addChild(root_1, 
                        stream_PAREND.nextNode()
                        );

                        adaptor.addChild(root_0, root_1);
                        }

                    }


                    retval.tree = root_0;
                    }

                    }
                    break;

            }
            retval.stop = input.LT(-1);


            if ( state.backtracking==0 ) {

            retval.tree = (Object)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }

        finally {
        	// do for sure before leaving
            if ( state.backtracking>0 ) { memoize(input, 16, parallel_block_StartIndex); }

        }
        return retval;
    }
    // $ANTLR end "parallel_block"


    public static class forall_statement_return extends ParserRuleReturnScope {
        Object tree;
        public Object getTree() { return tree; }
    };


    // $ANTLR start "forall_statement"
    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:140:1: forall_statement : FORALL assignment_expression TO expression statement -> ^( FORALL assignment_expression expression ^( BODY statement ) ) ;
    public final SCPARParser.forall_statement_return forall_statement() throws RecognitionException {
        SCPARParser.forall_statement_return retval = new SCPARParser.forall_statement_return();
        retval.start = input.LT(1);

        int forall_statement_StartIndex = input.index();

        Object root_0 = null;

        Token FORALL93=null;
        Token TO95=null;
        SCPARParser.assignment_expression_return assignment_expression94 =null;

        SCPARParser.expression_return expression96 =null;

        SCPARParser.statement_return statement97 =null;


        Object FORALL93_tree=null;
        Object TO95_tree=null;
        RewriteRuleTokenStream stream_FORALL=new RewriteRuleTokenStream(adaptor,"token FORALL");
        RewriteRuleTokenStream stream_TO=new RewriteRuleTokenStream(adaptor,"token TO");
        RewriteRuleSubtreeStream stream_expression=new RewriteRuleSubtreeStream(adaptor,"rule expression");
        RewriteRuleSubtreeStream stream_statement=new RewriteRuleSubtreeStream(adaptor,"rule statement");
        RewriteRuleSubtreeStream stream_assignment_expression=new RewriteRuleSubtreeStream(adaptor,"rule assignment_expression");
        try {
            if ( state.backtracking>0 && alreadyParsedRule(input, 17) ) { return retval; }

            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:141:2: ( FORALL assignment_expression TO expression statement -> ^( FORALL assignment_expression expression ^( BODY statement ) ) )
            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:141:4: FORALL assignment_expression TO expression statement
            {
            FORALL93=(Token)match(input,FORALL,FOLLOW_FORALL_in_forall_statement792); if (state.failed) return retval; 
            if ( state.backtracking==0 ) stream_FORALL.add(FORALL93);


            pushFollow(FOLLOW_assignment_expression_in_forall_statement794);
            assignment_expression94=assignment_expression();

            state._fsp--;
            if (state.failed) return retval;
            if ( state.backtracking==0 ) stream_assignment_expression.add(assignment_expression94.getTree());

            TO95=(Token)match(input,TO,FOLLOW_TO_in_forall_statement796); if (state.failed) return retval; 
            if ( state.backtracking==0 ) stream_TO.add(TO95);


            pushFollow(FOLLOW_expression_in_forall_statement798);
            expression96=expression();

            state._fsp--;
            if (state.failed) return retval;
            if ( state.backtracking==0 ) stream_expression.add(expression96.getTree());

            pushFollow(FOLLOW_statement_in_forall_statement800);
            statement97=statement();

            state._fsp--;
            if (state.failed) return retval;
            if ( state.backtracking==0 ) stream_statement.add(statement97.getTree());

            // AST REWRITE
            // elements: statement, FORALL, expression, assignment_expression
            // token labels: 
            // rule labels: retval
            // token list labels: 
            // rule list labels: 
            // wildcard labels: 
            if ( state.backtracking==0 ) {

            retval.tree = root_0;
            RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null);

            root_0 = (Object)adaptor.nil();
            // 141:57: -> ^( FORALL assignment_expression expression ^( BODY statement ) )
            {
                // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:141:60: ^( FORALL assignment_expression expression ^( BODY statement ) )
                {
                Object root_1 = (Object)adaptor.nil();
                root_1 = (Object)adaptor.becomeRoot(
                new ForAllStatement(stream_FORALL.nextToken())
                , root_1);

                adaptor.addChild(root_1, stream_assignment_expression.nextTree());

                adaptor.addChild(root_1, stream_expression.nextTree());

                // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:141:119: ^( BODY statement )
                {
                Object root_2 = (Object)adaptor.nil();
                root_2 = (Object)adaptor.becomeRoot(
                (Object)adaptor.create(BODY, "BODY")
                , root_2);

                adaptor.addChild(root_2, stream_statement.nextTree());

                adaptor.addChild(root_1, root_2);
                }

                adaptor.addChild(root_0, root_1);
                }

            }


            retval.tree = root_0;
            }

            }

            retval.stop = input.LT(-1);


            if ( state.backtracking==0 ) {

            retval.tree = (Object)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }

        finally {
        	// do for sure before leaving
            if ( state.backtracking>0 ) { memoize(input, 17, forall_statement_StartIndex); }

        }
        return retval;
    }
    // $ANTLR end "forall_statement"


    public static class if_statement_return extends ParserRuleReturnScope {
        Object tree;
        public Object getTree() { return tree; }
    };


    // $ANTLR start "if_statement"
    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:144:1: if_statement : IF '(' expression ')' statement ( ELSE statement )? ;
    public final SCPARParser.if_statement_return if_statement() throws RecognitionException {
        SCPARParser.if_statement_return retval = new SCPARParser.if_statement_return();
        retval.start = input.LT(1);

        int if_statement_StartIndex = input.index();

        Object root_0 = null;

        Token IF98=null;
        Token char_literal99=null;
        Token char_literal101=null;
        Token ELSE103=null;
        SCPARParser.expression_return expression100 =null;

        SCPARParser.statement_return statement102 =null;

        SCPARParser.statement_return statement104 =null;


        Object IF98_tree=null;
        Object char_literal99_tree=null;
        Object char_literal101_tree=null;
        Object ELSE103_tree=null;

        try {
            if ( state.backtracking>0 && alreadyParsedRule(input, 18) ) { return retval; }

            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:145:2: ( IF '(' expression ')' statement ( ELSE statement )? )
            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:145:4: IF '(' expression ')' statement ( ELSE statement )?
            {
            root_0 = (Object)adaptor.nil();


            IF98=(Token)match(input,IF,FOLLOW_IF_in_if_statement831); if (state.failed) return retval;
            if ( state.backtracking==0 ) {
            IF98_tree = 
            (Object)adaptor.create(IF98)
            ;
            adaptor.addChild(root_0, IF98_tree);
            }

            char_literal99=(Token)match(input,130,FOLLOW_130_in_if_statement833); if (state.failed) return retval;
            if ( state.backtracking==0 ) {
            char_literal99_tree = 
            (Object)adaptor.create(char_literal99)
            ;
            adaptor.addChild(root_0, char_literal99_tree);
            }

            pushFollow(FOLLOW_expression_in_if_statement835);
            expression100=expression();

            state._fsp--;
            if (state.failed) return retval;
            if ( state.backtracking==0 ) adaptor.addChild(root_0, expression100.getTree());

            char_literal101=(Token)match(input,131,FOLLOW_131_in_if_statement837); if (state.failed) return retval;
            if ( state.backtracking==0 ) {
            char_literal101_tree = 
            (Object)adaptor.create(char_literal101)
            ;
            adaptor.addChild(root_0, char_literal101_tree);
            }

            pushFollow(FOLLOW_statement_in_if_statement839);
            statement102=statement();

            state._fsp--;
            if (state.failed) return retval;
            if ( state.backtracking==0 ) adaptor.addChild(root_0, statement102.getTree());

            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:145:36: ( ELSE statement )?
            int alt22=2;
            int LA22_0 = input.LA(1);

            if ( (LA22_0==ELSE) ) {
                int LA22_1 = input.LA(2);

                if ( (synpred34_SCPAR()) ) {
                    alt22=1;
                }
            }
            switch (alt22) {
                case 1 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:145:37: ELSE statement
                    {
                    ELSE103=(Token)match(input,ELSE,FOLLOW_ELSE_in_if_statement842); if (state.failed) return retval;
                    if ( state.backtracking==0 ) {
                    ELSE103_tree = 
                    (Object)adaptor.create(ELSE103)
                    ;
                    adaptor.addChild(root_0, ELSE103_tree);
                    }

                    pushFollow(FOLLOW_statement_in_if_statement844);
                    statement104=statement();

                    state._fsp--;
                    if (state.failed) return retval;
                    if ( state.backtracking==0 ) adaptor.addChild(root_0, statement104.getTree());

                    }
                    break;

            }


            }

            retval.stop = input.LT(-1);


            if ( state.backtracking==0 ) {

            retval.tree = (Object)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }

        finally {
        	// do for sure before leaving
            if ( state.backtracking>0 ) { memoize(input, 18, if_statement_StartIndex); }

        }
        return retval;
    }
    // $ANTLR end "if_statement"


    public static class for_statement_return extends ParserRuleReturnScope {
        Object tree;
        public Object getTree() { return tree; }
    };


    // $ANTLR start "for_statement"
    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:148:1: for_statement : FOR '(' ( expression )? ';' ( expression )? ';' ( expression )? ')' statement ;
    public final SCPARParser.for_statement_return for_statement() throws RecognitionException {
        SCPARParser.for_statement_return retval = new SCPARParser.for_statement_return();
        retval.start = input.LT(1);

        int for_statement_StartIndex = input.index();

        Object root_0 = null;

        Token FOR105=null;
        Token char_literal106=null;
        Token char_literal108=null;
        Token char_literal110=null;
        Token char_literal112=null;
        SCPARParser.expression_return expression107 =null;

        SCPARParser.expression_return expression109 =null;

        SCPARParser.expression_return expression111 =null;

        SCPARParser.statement_return statement113 =null;


        Object FOR105_tree=null;
        Object char_literal106_tree=null;
        Object char_literal108_tree=null;
        Object char_literal110_tree=null;
        Object char_literal112_tree=null;

        try {
            if ( state.backtracking>0 && alreadyParsedRule(input, 19) ) { return retval; }

            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:149:2: ( FOR '(' ( expression )? ';' ( expression )? ';' ( expression )? ')' statement )
            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:149:4: FOR '(' ( expression )? ';' ( expression )? ';' ( expression )? ')' statement
            {
            root_0 = (Object)adaptor.nil();


            FOR105=(Token)match(input,FOR,FOLLOW_FOR_in_for_statement858); if (state.failed) return retval;
            if ( state.backtracking==0 ) {
            FOR105_tree = 
            (Object)adaptor.create(FOR105)
            ;
            adaptor.addChild(root_0, FOR105_tree);
            }

            char_literal106=(Token)match(input,130,FOLLOW_130_in_for_statement860); if (state.failed) return retval;
            if ( state.backtracking==0 ) {
            char_literal106_tree = 
            (Object)adaptor.create(char_literal106)
            ;
            adaptor.addChild(root_0, char_literal106_tree);
            }

            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:149:12: ( expression )?
            int alt23=2;
            int LA23_0 = input.LA(1);

            if ( ((LA23_0 >= ADDRESSOF && LA23_0 <= ALLOC_PROC)||LA23_0==BITWISE_NOT||LA23_0==CHARACTER_LITERAL||(LA23_0 >= CREATE && LA23_0 <= DECIMAL_LITERAL)||LA23_0==FLOATING_POINT_LITERAL||LA23_0==HEX_LITERAL||LA23_0==IDENTIFIER||LA23_0==INDIRECTION||LA23_0==LOCK||LA23_0==MINUS||LA23_0==NOT||LA23_0==OCTAL_LITERAL||(LA23_0 >= PLUS && LA23_0 <= READ_EV)||(LA23_0 >= REMOVE_SEM && LA23_0 <= RES_EV)||LA23_0==SET_EV||LA23_0==STRING_LITERAL||LA23_0==UNLOCK||(LA23_0 >= WAIT_ALL && LA23_0 <= WAIT_EV)||LA23_0==130||LA23_0==132||LA23_0==134) ) {
                alt23=1;
            }
            switch (alt23) {
                case 1 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:149:12: expression
                    {
                    pushFollow(FOLLOW_expression_in_for_statement862);
                    expression107=expression();

                    state._fsp--;
                    if (state.failed) return retval;
                    if ( state.backtracking==0 ) adaptor.addChild(root_0, expression107.getTree());

                    }
                    break;

            }


            char_literal108=(Token)match(input,138,FOLLOW_138_in_for_statement865); if (state.failed) return retval;
            if ( state.backtracking==0 ) {
            char_literal108_tree = 
            (Object)adaptor.create(char_literal108)
            ;
            adaptor.addChild(root_0, char_literal108_tree);
            }

            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:149:28: ( expression )?
            int alt24=2;
            int LA24_0 = input.LA(1);

            if ( ((LA24_0 >= ADDRESSOF && LA24_0 <= ALLOC_PROC)||LA24_0==BITWISE_NOT||LA24_0==CHARACTER_LITERAL||(LA24_0 >= CREATE && LA24_0 <= DECIMAL_LITERAL)||LA24_0==FLOATING_POINT_LITERAL||LA24_0==HEX_LITERAL||LA24_0==IDENTIFIER||LA24_0==INDIRECTION||LA24_0==LOCK||LA24_0==MINUS||LA24_0==NOT||LA24_0==OCTAL_LITERAL||(LA24_0 >= PLUS && LA24_0 <= READ_EV)||(LA24_0 >= REMOVE_SEM && LA24_0 <= RES_EV)||LA24_0==SET_EV||LA24_0==STRING_LITERAL||LA24_0==UNLOCK||(LA24_0 >= WAIT_ALL && LA24_0 <= WAIT_EV)||LA24_0==130||LA24_0==132||LA24_0==134) ) {
                alt24=1;
            }
            switch (alt24) {
                case 1 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:149:28: expression
                    {
                    pushFollow(FOLLOW_expression_in_for_statement867);
                    expression109=expression();

                    state._fsp--;
                    if (state.failed) return retval;
                    if ( state.backtracking==0 ) adaptor.addChild(root_0, expression109.getTree());

                    }
                    break;

            }


            char_literal110=(Token)match(input,138,FOLLOW_138_in_for_statement870); if (state.failed) return retval;
            if ( state.backtracking==0 ) {
            char_literal110_tree = 
            (Object)adaptor.create(char_literal110)
            ;
            adaptor.addChild(root_0, char_literal110_tree);
            }

            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:149:44: ( expression )?
            int alt25=2;
            int LA25_0 = input.LA(1);

            if ( ((LA25_0 >= ADDRESSOF && LA25_0 <= ALLOC_PROC)||LA25_0==BITWISE_NOT||LA25_0==CHARACTER_LITERAL||(LA25_0 >= CREATE && LA25_0 <= DECIMAL_LITERAL)||LA25_0==FLOATING_POINT_LITERAL||LA25_0==HEX_LITERAL||LA25_0==IDENTIFIER||LA25_0==INDIRECTION||LA25_0==LOCK||LA25_0==MINUS||LA25_0==NOT||LA25_0==OCTAL_LITERAL||(LA25_0 >= PLUS && LA25_0 <= READ_EV)||(LA25_0 >= REMOVE_SEM && LA25_0 <= RES_EV)||LA25_0==SET_EV||LA25_0==STRING_LITERAL||LA25_0==UNLOCK||(LA25_0 >= WAIT_ALL && LA25_0 <= WAIT_EV)||LA25_0==130||LA25_0==132||LA25_0==134) ) {
                alt25=1;
            }
            switch (alt25) {
                case 1 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:149:44: expression
                    {
                    pushFollow(FOLLOW_expression_in_for_statement872);
                    expression111=expression();

                    state._fsp--;
                    if (state.failed) return retval;
                    if ( state.backtracking==0 ) adaptor.addChild(root_0, expression111.getTree());

                    }
                    break;

            }


            char_literal112=(Token)match(input,131,FOLLOW_131_in_for_statement875); if (state.failed) return retval;
            if ( state.backtracking==0 ) {
            char_literal112_tree = 
            (Object)adaptor.create(char_literal112)
            ;
            adaptor.addChild(root_0, char_literal112_tree);
            }

            pushFollow(FOLLOW_statement_in_for_statement877);
            statement113=statement();

            state._fsp--;
            if (state.failed) return retval;
            if ( state.backtracking==0 ) adaptor.addChild(root_0, statement113.getTree());

            }

            retval.stop = input.LT(-1);


            if ( state.backtracking==0 ) {

            retval.tree = (Object)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }

        finally {
        	// do for sure before leaving
            if ( state.backtracking>0 ) { memoize(input, 19, for_statement_StartIndex); }

        }
        return retval;
    }
    // $ANTLR end "for_statement"


    public static class function_call_return extends ParserRuleReturnScope {
        Object tree;
        public Object getTree() { return tree; }
    };


    // $ANTLR start "function_call"
    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:153:1: function_call : ( c_function_call | cpar_function_call );
    public final SCPARParser.function_call_return function_call() throws RecognitionException {
        SCPARParser.function_call_return retval = new SCPARParser.function_call_return();
        retval.start = input.LT(1);

        int function_call_StartIndex = input.index();

        Object root_0 = null;

        SCPARParser.c_function_call_return c_function_call114 =null;

        SCPARParser.cpar_function_call_return cpar_function_call115 =null;



        try {
            if ( state.backtracking>0 && alreadyParsedRule(input, 20) ) { return retval; }

            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:154:2: ( c_function_call | cpar_function_call )
            int alt26=2;
            int LA26_0 = input.LA(1);

            if ( (LA26_0==IDENTIFIER) ) {
                alt26=1;
            }
            else if ( (LA26_0==ALLOC_PROC||(LA26_0 >= CREATE && LA26_0 <= CREATE_SEM)||LA26_0==LOCK||LA26_0==READ_EV||(LA26_0 >= REMOVE_SEM && LA26_0 <= RES_EV)||LA26_0==SET_EV||LA26_0==UNLOCK||(LA26_0 >= WAIT_ALL && LA26_0 <= WAIT_EV)) ) {
                alt26=2;
            }
            else {
                if (state.backtracking>0) {state.failed=true; return retval;}
                NoViableAltException nvae =
                    new NoViableAltException("", 26, 0, input);

                throw nvae;

            }
            switch (alt26) {
                case 1 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:154:4: c_function_call
                    {
                    root_0 = (Object)adaptor.nil();


                    pushFollow(FOLLOW_c_function_call_in_function_call891);
                    c_function_call114=c_function_call();

                    state._fsp--;
                    if (state.failed) return retval;
                    if ( state.backtracking==0 ) adaptor.addChild(root_0, c_function_call114.getTree());

                    }
                    break;
                case 2 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:155:4: cpar_function_call
                    {
                    root_0 = (Object)adaptor.nil();


                    pushFollow(FOLLOW_cpar_function_call_in_function_call896);
                    cpar_function_call115=cpar_function_call();

                    state._fsp--;
                    if (state.failed) return retval;
                    if ( state.backtracking==0 ) adaptor.addChild(root_0, cpar_function_call115.getTree());

                    }
                    break;

            }
            retval.stop = input.LT(-1);


            if ( state.backtracking==0 ) {

            retval.tree = (Object)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }

        finally {
        	// do for sure before leaving
            if ( state.backtracking>0 ) { memoize(input, 20, function_call_StartIndex); }

        }
        return retval;
    }
    // $ANTLR end "function_call"


    public static class cpar_function_call_return extends ParserRuleReturnScope {
        Object tree;
        public Object getTree() { return tree; }
    };


    // $ANTLR start "cpar_function_call"
    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:158:1: cpar_function_call : ( semaphore_function_call | event_function_call | proc_function_call );
    public final SCPARParser.cpar_function_call_return cpar_function_call() throws RecognitionException {
        SCPARParser.cpar_function_call_return retval = new SCPARParser.cpar_function_call_return();
        retval.start = input.LT(1);

        int cpar_function_call_StartIndex = input.index();

        Object root_0 = null;

        SCPARParser.semaphore_function_call_return semaphore_function_call116 =null;

        SCPARParser.event_function_call_return event_function_call117 =null;

        SCPARParser.proc_function_call_return proc_function_call118 =null;



        try {
            if ( state.backtracking>0 && alreadyParsedRule(input, 21) ) { return retval; }

            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:159:2: ( semaphore_function_call | event_function_call | proc_function_call )
            int alt27=3;
            switch ( input.LA(1) ) {
            case CREATE_SEM:
            case LOCK:
            case REMOVE_SEM:
            case UNLOCK:
                {
                alt27=1;
                }
                break;
            case CREATE_EV:
            case READ_EV:
            case REM_EV:
            case RES_EV:
            case SET_EV:
            case WAIT_EV:
                {
                alt27=2;
                }
                break;
            case ALLOC_PROC:
            case CREATE:
            case WAIT_ALL:
                {
                alt27=3;
                }
                break;
            default:
                if (state.backtracking>0) {state.failed=true; return retval;}
                NoViableAltException nvae =
                    new NoViableAltException("", 27, 0, input);

                throw nvae;

            }

            switch (alt27) {
                case 1 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:159:4: semaphore_function_call
                    {
                    root_0 = (Object)adaptor.nil();


                    pushFollow(FOLLOW_semaphore_function_call_in_cpar_function_call908);
                    semaphore_function_call116=semaphore_function_call();

                    state._fsp--;
                    if (state.failed) return retval;
                    if ( state.backtracking==0 ) adaptor.addChild(root_0, semaphore_function_call116.getTree());

                    }
                    break;
                case 2 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:160:4: event_function_call
                    {
                    root_0 = (Object)adaptor.nil();


                    pushFollow(FOLLOW_event_function_call_in_cpar_function_call913);
                    event_function_call117=event_function_call();

                    state._fsp--;
                    if (state.failed) return retval;
                    if ( state.backtracking==0 ) adaptor.addChild(root_0, event_function_call117.getTree());

                    }
                    break;
                case 3 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:161:4: proc_function_call
                    {
                    root_0 = (Object)adaptor.nil();


                    pushFollow(FOLLOW_proc_function_call_in_cpar_function_call918);
                    proc_function_call118=proc_function_call();

                    state._fsp--;
                    if (state.failed) return retval;
                    if ( state.backtracking==0 ) adaptor.addChild(root_0, proc_function_call118.getTree());

                    }
                    break;

            }
            retval.stop = input.LT(-1);


            if ( state.backtracking==0 ) {

            retval.tree = (Object)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }

        finally {
        	// do for sure before leaving
            if ( state.backtracking>0 ) { memoize(input, 21, cpar_function_call_StartIndex); }

        }
        return retval;
    }
    // $ANTLR end "cpar_function_call"


    public static class proc_function_call_return extends ParserRuleReturnScope {
        Object tree;
        public Object getTree() { return tree; }
    };


    // $ANTLR start "proc_function_call"
    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:164:1: proc_function_call : ( ALLOC_PROC '(' constant ')' -> ^( ALLOC_PROC constant ) | CREATE assignment_expression ',' function_call -> ^( CREATE assignment_expression function_call ) | WAIT_ALL '(' ')' -> ^( WAIT_ALL ')' ) );
    public final SCPARParser.proc_function_call_return proc_function_call() throws RecognitionException {
        SCPARParser.proc_function_call_return retval = new SCPARParser.proc_function_call_return();
        retval.start = input.LT(1);

        int proc_function_call_StartIndex = input.index();

        Object root_0 = null;

        Token ALLOC_PROC119=null;
        Token char_literal120=null;
        Token char_literal122=null;
        Token CREATE123=null;
        Token char_literal125=null;
        Token WAIT_ALL127=null;
        Token char_literal128=null;
        Token char_literal129=null;
        SCPARParser.constant_return constant121 =null;

        SCPARParser.assignment_expression_return assignment_expression124 =null;

        SCPARParser.function_call_return function_call126 =null;


        Object ALLOC_PROC119_tree=null;
        Object char_literal120_tree=null;
        Object char_literal122_tree=null;
        Object CREATE123_tree=null;
        Object char_literal125_tree=null;
        Object WAIT_ALL127_tree=null;
        Object char_literal128_tree=null;
        Object char_literal129_tree=null;
        RewriteRuleTokenStream stream_133=new RewriteRuleTokenStream(adaptor,"token 133");
        RewriteRuleTokenStream stream_CREATE=new RewriteRuleTokenStream(adaptor,"token CREATE");
        RewriteRuleTokenStream stream_WAIT_ALL=new RewriteRuleTokenStream(adaptor,"token WAIT_ALL");
        RewriteRuleTokenStream stream_131=new RewriteRuleTokenStream(adaptor,"token 131");
        RewriteRuleTokenStream stream_130=new RewriteRuleTokenStream(adaptor,"token 130");
        RewriteRuleTokenStream stream_ALLOC_PROC=new RewriteRuleTokenStream(adaptor,"token ALLOC_PROC");
        RewriteRuleSubtreeStream stream_constant=new RewriteRuleSubtreeStream(adaptor,"rule constant");
        RewriteRuleSubtreeStream stream_function_call=new RewriteRuleSubtreeStream(adaptor,"rule function_call");
        RewriteRuleSubtreeStream stream_assignment_expression=new RewriteRuleSubtreeStream(adaptor,"rule assignment_expression");
        try {
            if ( state.backtracking>0 && alreadyParsedRule(input, 22) ) { return retval; }

            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:165:2: ( ALLOC_PROC '(' constant ')' -> ^( ALLOC_PROC constant ) | CREATE assignment_expression ',' function_call -> ^( CREATE assignment_expression function_call ) | WAIT_ALL '(' ')' -> ^( WAIT_ALL ')' ) )
            int alt28=3;
            switch ( input.LA(1) ) {
            case ALLOC_PROC:
                {
                alt28=1;
                }
                break;
            case CREATE:
                {
                alt28=2;
                }
                break;
            case WAIT_ALL:
                {
                alt28=3;
                }
                break;
            default:
                if (state.backtracking>0) {state.failed=true; return retval;}
                NoViableAltException nvae =
                    new NoViableAltException("", 28, 0, input);

                throw nvae;

            }

            switch (alt28) {
                case 1 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:165:4: ALLOC_PROC '(' constant ')'
                    {
                    ALLOC_PROC119=(Token)match(input,ALLOC_PROC,FOLLOW_ALLOC_PROC_in_proc_function_call930); if (state.failed) return retval; 
                    if ( state.backtracking==0 ) stream_ALLOC_PROC.add(ALLOC_PROC119);


                    char_literal120=(Token)match(input,130,FOLLOW_130_in_proc_function_call932); if (state.failed) return retval; 
                    if ( state.backtracking==0 ) stream_130.add(char_literal120);


                    pushFollow(FOLLOW_constant_in_proc_function_call934);
                    constant121=constant();

                    state._fsp--;
                    if (state.failed) return retval;
                    if ( state.backtracking==0 ) stream_constant.add(constant121.getTree());

                    char_literal122=(Token)match(input,131,FOLLOW_131_in_proc_function_call936); if (state.failed) return retval; 
                    if ( state.backtracking==0 ) stream_131.add(char_literal122);


                    // AST REWRITE
                    // elements: constant, ALLOC_PROC
                    // token labels: 
                    // rule labels: retval
                    // token list labels: 
                    // rule list labels: 
                    // wildcard labels: 
                    if ( state.backtracking==0 ) {

                    retval.tree = root_0;
                    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null);

                    root_0 = (Object)adaptor.nil();
                    // 165:32: -> ^( ALLOC_PROC constant )
                    {
                        // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:165:35: ^( ALLOC_PROC constant )
                        {
                        Object root_1 = (Object)adaptor.nil();
                        root_1 = (Object)adaptor.becomeRoot(
                        new AllocProcCall(stream_ALLOC_PROC.nextToken())
                        , root_1);

                        adaptor.addChild(root_1, stream_constant.nextTree());

                        adaptor.addChild(root_0, root_1);
                        }

                    }


                    retval.tree = root_0;
                    }

                    }
                    break;
                case 2 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:166:4: CREATE assignment_expression ',' function_call
                    {
                    CREATE123=(Token)match(input,CREATE,FOLLOW_CREATE_in_proc_function_call952); if (state.failed) return retval; 
                    if ( state.backtracking==0 ) stream_CREATE.add(CREATE123);


                    pushFollow(FOLLOW_assignment_expression_in_proc_function_call954);
                    assignment_expression124=assignment_expression();

                    state._fsp--;
                    if (state.failed) return retval;
                    if ( state.backtracking==0 ) stream_assignment_expression.add(assignment_expression124.getTree());

                    char_literal125=(Token)match(input,133,FOLLOW_133_in_proc_function_call956); if (state.failed) return retval; 
                    if ( state.backtracking==0 ) stream_133.add(char_literal125);


                    pushFollow(FOLLOW_function_call_in_proc_function_call958);
                    function_call126=function_call();

                    state._fsp--;
                    if (state.failed) return retval;
                    if ( state.backtracking==0 ) stream_function_call.add(function_call126.getTree());

                    // AST REWRITE
                    // elements: CREATE, function_call, assignment_expression
                    // token labels: 
                    // rule labels: retval
                    // token list labels: 
                    // rule list labels: 
                    // wildcard labels: 
                    if ( state.backtracking==0 ) {

                    retval.tree = root_0;
                    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null);

                    root_0 = (Object)adaptor.nil();
                    // 166:51: -> ^( CREATE assignment_expression function_call )
                    {
                        // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:166:54: ^( CREATE assignment_expression function_call )
                        {
                        Object root_1 = (Object)adaptor.nil();
                        root_1 = (Object)adaptor.becomeRoot(
                        new CreateProcCall(stream_CREATE.nextToken())
                        , root_1);

                        adaptor.addChild(root_1, stream_assignment_expression.nextTree());

                        adaptor.addChild(root_1, stream_function_call.nextTree());

                        adaptor.addChild(root_0, root_1);
                        }

                    }


                    retval.tree = root_0;
                    }

                    }
                    break;
                case 3 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:167:4: WAIT_ALL '(' ')'
                    {
                    WAIT_ALL127=(Token)match(input,WAIT_ALL,FOLLOW_WAIT_ALL_in_proc_function_call976); if (state.failed) return retval; 
                    if ( state.backtracking==0 ) stream_WAIT_ALL.add(WAIT_ALL127);


                    char_literal128=(Token)match(input,130,FOLLOW_130_in_proc_function_call978); if (state.failed) return retval; 
                    if ( state.backtracking==0 ) stream_130.add(char_literal128);


                    char_literal129=(Token)match(input,131,FOLLOW_131_in_proc_function_call980); if (state.failed) return retval; 
                    if ( state.backtracking==0 ) stream_131.add(char_literal129);


                    // AST REWRITE
                    // elements: WAIT_ALL, 131
                    // token labels: 
                    // rule labels: retval
                    // token list labels: 
                    // rule list labels: 
                    // wildcard labels: 
                    if ( state.backtracking==0 ) {

                    retval.tree = root_0;
                    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null);

                    root_0 = (Object)adaptor.nil();
                    // 167:21: -> ^( WAIT_ALL ')' )
                    {
                        // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:167:24: ^( WAIT_ALL ')' )
                        {
                        Object root_1 = (Object)adaptor.nil();
                        root_1 = (Object)adaptor.becomeRoot(
                        new WaitAllCall(stream_WAIT_ALL.nextToken())
                        , root_1);

                        adaptor.addChild(root_1, 
                        stream_131.nextNode()
                        );

                        adaptor.addChild(root_0, root_1);
                        }

                    }


                    retval.tree = root_0;
                    }

                    }
                    break;

            }
            retval.stop = input.LT(-1);


            if ( state.backtracking==0 ) {

            retval.tree = (Object)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }

        finally {
        	// do for sure before leaving
            if ( state.backtracking>0 ) { memoize(input, 22, proc_function_call_StartIndex); }

        }
        return retval;
    }
    // $ANTLR end "proc_function_call"


    public static class event_function_call_return extends ParserRuleReturnScope {
        Object tree;
        public Object getTree() { return tree; }
    };


    // $ANTLR start "event_function_call"
    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:171:1: event_function_call : event_type '(' '&' unary_expression ')' -> ^( event_type unary_expression ) ;
    public final SCPARParser.event_function_call_return event_function_call() throws RecognitionException {
        SCPARParser.event_function_call_return retval = new SCPARParser.event_function_call_return();
        retval.start = input.LT(1);

        int event_function_call_StartIndex = input.index();

        Object root_0 = null;

        Token char_literal131=null;
        Token char_literal132=null;
        Token char_literal134=null;
        SCPARParser.event_type_return event_type130 =null;

        SCPARParser.unary_expression_return unary_expression133 =null;


        Object char_literal131_tree=null;
        Object char_literal132_tree=null;
        Object char_literal134_tree=null;
        RewriteRuleTokenStream stream_131=new RewriteRuleTokenStream(adaptor,"token 131");
        RewriteRuleTokenStream stream_ADDRESSOF=new RewriteRuleTokenStream(adaptor,"token ADDRESSOF");
        RewriteRuleTokenStream stream_130=new RewriteRuleTokenStream(adaptor,"token 130");
        RewriteRuleSubtreeStream stream_event_type=new RewriteRuleSubtreeStream(adaptor,"rule event_type");
        RewriteRuleSubtreeStream stream_unary_expression=new RewriteRuleSubtreeStream(adaptor,"rule unary_expression");
        try {
            if ( state.backtracking>0 && alreadyParsedRule(input, 23) ) { return retval; }

            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:172:2: ( event_type '(' '&' unary_expression ')' -> ^( event_type unary_expression ) )
            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:172:4: event_type '(' '&' unary_expression ')'
            {
            pushFollow(FOLLOW_event_type_in_event_function_call1004);
            event_type130=event_type();

            state._fsp--;
            if (state.failed) return retval;
            if ( state.backtracking==0 ) stream_event_type.add(event_type130.getTree());

            char_literal131=(Token)match(input,130,FOLLOW_130_in_event_function_call1006); if (state.failed) return retval; 
            if ( state.backtracking==0 ) stream_130.add(char_literal131);


            char_literal132=(Token)match(input,ADDRESSOF,FOLLOW_ADDRESSOF_in_event_function_call1008); if (state.failed) return retval; 
            if ( state.backtracking==0 ) stream_ADDRESSOF.add(char_literal132);


            pushFollow(FOLLOW_unary_expression_in_event_function_call1010);
            unary_expression133=unary_expression();

            state._fsp--;
            if (state.failed) return retval;
            if ( state.backtracking==0 ) stream_unary_expression.add(unary_expression133.getTree());

            char_literal134=(Token)match(input,131,FOLLOW_131_in_event_function_call1012); if (state.failed) return retval; 
            if ( state.backtracking==0 ) stream_131.add(char_literal134);


            // AST REWRITE
            // elements: event_type, unary_expression
            // token labels: 
            // rule labels: retval
            // token list labels: 
            // rule list labels: 
            // wildcard labels: 
            if ( state.backtracking==0 ) {

            retval.tree = root_0;
            RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null);

            root_0 = (Object)adaptor.nil();
            // 172:44: -> ^( event_type unary_expression )
            {
                // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:172:47: ^( event_type unary_expression )
                {
                Object root_1 = (Object)adaptor.nil();
                root_1 = (Object)adaptor.becomeRoot(stream_event_type.nextNode(), root_1);

                adaptor.addChild(root_1, stream_unary_expression.nextTree());

                adaptor.addChild(root_0, root_1);
                }

            }


            retval.tree = root_0;
            }

            }

            retval.stop = input.LT(-1);


            if ( state.backtracking==0 ) {

            retval.tree = (Object)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }

        finally {
        	// do for sure before leaving
            if ( state.backtracking>0 ) { memoize(input, 23, event_function_call_StartIndex); }

        }
        return retval;
    }
    // $ANTLR end "event_function_call"


    public static class event_type_return extends ParserRuleReturnScope {
        Object tree;
        public Object getTree() { return tree; }
    };


    // $ANTLR start "event_type"
    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:175:1: event_type : ( CREATE_EV -> CREATE_EV | SET_EV -> SET_EV | REM_EV -> REM_EV | RES_EV -> RES_EV | WAIT_EV -> WAIT_EV | READ_EV -> READ_EV );
    public final SCPARParser.event_type_return event_type() throws RecognitionException {
        SCPARParser.event_type_return retval = new SCPARParser.event_type_return();
        retval.start = input.LT(1);

        int event_type_StartIndex = input.index();

        Object root_0 = null;

        Token CREATE_EV135=null;
        Token SET_EV136=null;
        Token REM_EV137=null;
        Token RES_EV138=null;
        Token WAIT_EV139=null;
        Token READ_EV140=null;

        Object CREATE_EV135_tree=null;
        Object SET_EV136_tree=null;
        Object REM_EV137_tree=null;
        Object RES_EV138_tree=null;
        Object WAIT_EV139_tree=null;
        Object READ_EV140_tree=null;
        RewriteRuleTokenStream stream_SET_EV=new RewriteRuleTokenStream(adaptor,"token SET_EV");
        RewriteRuleTokenStream stream_REM_EV=new RewriteRuleTokenStream(adaptor,"token REM_EV");
        RewriteRuleTokenStream stream_READ_EV=new RewriteRuleTokenStream(adaptor,"token READ_EV");
        RewriteRuleTokenStream stream_WAIT_EV=new RewriteRuleTokenStream(adaptor,"token WAIT_EV");
        RewriteRuleTokenStream stream_CREATE_EV=new RewriteRuleTokenStream(adaptor,"token CREATE_EV");
        RewriteRuleTokenStream stream_RES_EV=new RewriteRuleTokenStream(adaptor,"token RES_EV");

        try {
            if ( state.backtracking>0 && alreadyParsedRule(input, 24) ) { return retval; }

            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:176:2: ( CREATE_EV -> CREATE_EV | SET_EV -> SET_EV | REM_EV -> REM_EV | RES_EV -> RES_EV | WAIT_EV -> WAIT_EV | READ_EV -> READ_EV )
            int alt29=6;
            switch ( input.LA(1) ) {
            case CREATE_EV:
                {
                alt29=1;
                }
                break;
            case SET_EV:
                {
                alt29=2;
                }
                break;
            case REM_EV:
                {
                alt29=3;
                }
                break;
            case RES_EV:
                {
                alt29=4;
                }
                break;
            case WAIT_EV:
                {
                alt29=5;
                }
                break;
            case READ_EV:
                {
                alt29=6;
                }
                break;
            default:
                if (state.backtracking>0) {state.failed=true; return retval;}
                NoViableAltException nvae =
                    new NoViableAltException("", 29, 0, input);

                throw nvae;

            }

            switch (alt29) {
                case 1 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:176:4: CREATE_EV
                    {
                    CREATE_EV135=(Token)match(input,CREATE_EV,FOLLOW_CREATE_EV_in_event_type1032); if (state.failed) return retval; 
                    if ( state.backtracking==0 ) stream_CREATE_EV.add(CREATE_EV135);


                    // AST REWRITE
                    // elements: CREATE_EV
                    // token labels: 
                    // rule labels: retval
                    // token list labels: 
                    // rule list labels: 
                    // wildcard labels: 
                    if ( state.backtracking==0 ) {

                    retval.tree = root_0;
                    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null);

                    root_0 = (Object)adaptor.nil();
                    // 176:14: -> CREATE_EV
                    {
                        adaptor.addChild(root_0, 
                        new EventStatement(stream_CREATE_EV.nextToken())
                        );

                    }


                    retval.tree = root_0;
                    }

                    }
                    break;
                case 2 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:177:4: SET_EV
                    {
                    SET_EV136=(Token)match(input,SET_EV,FOLLOW_SET_EV_in_event_type1044); if (state.failed) return retval; 
                    if ( state.backtracking==0 ) stream_SET_EV.add(SET_EV136);


                    // AST REWRITE
                    // elements: SET_EV
                    // token labels: 
                    // rule labels: retval
                    // token list labels: 
                    // rule list labels: 
                    // wildcard labels: 
                    if ( state.backtracking==0 ) {

                    retval.tree = root_0;
                    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null);

                    root_0 = (Object)adaptor.nil();
                    // 177:11: -> SET_EV
                    {
                        adaptor.addChild(root_0, 
                        new EventStatement(stream_SET_EV.nextToken())
                        );

                    }


                    retval.tree = root_0;
                    }

                    }
                    break;
                case 3 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:178:4: REM_EV
                    {
                    REM_EV137=(Token)match(input,REM_EV,FOLLOW_REM_EV_in_event_type1056); if (state.failed) return retval; 
                    if ( state.backtracking==0 ) stream_REM_EV.add(REM_EV137);


                    // AST REWRITE
                    // elements: REM_EV
                    // token labels: 
                    // rule labels: retval
                    // token list labels: 
                    // rule list labels: 
                    // wildcard labels: 
                    if ( state.backtracking==0 ) {

                    retval.tree = root_0;
                    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null);

                    root_0 = (Object)adaptor.nil();
                    // 178:11: -> REM_EV
                    {
                        adaptor.addChild(root_0, 
                        new EventStatement(stream_REM_EV.nextToken())
                        );

                    }


                    retval.tree = root_0;
                    }

                    }
                    break;
                case 4 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:179:4: RES_EV
                    {
                    RES_EV138=(Token)match(input,RES_EV,FOLLOW_RES_EV_in_event_type1068); if (state.failed) return retval; 
                    if ( state.backtracking==0 ) stream_RES_EV.add(RES_EV138);


                    // AST REWRITE
                    // elements: RES_EV
                    // token labels: 
                    // rule labels: retval
                    // token list labels: 
                    // rule list labels: 
                    // wildcard labels: 
                    if ( state.backtracking==0 ) {

                    retval.tree = root_0;
                    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null);

                    root_0 = (Object)adaptor.nil();
                    // 179:11: -> RES_EV
                    {
                        adaptor.addChild(root_0, 
                        new EventStatement(stream_RES_EV.nextToken())
                        );

                    }


                    retval.tree = root_0;
                    }

                    }
                    break;
                case 5 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:180:4: WAIT_EV
                    {
                    WAIT_EV139=(Token)match(input,WAIT_EV,FOLLOW_WAIT_EV_in_event_type1080); if (state.failed) return retval; 
                    if ( state.backtracking==0 ) stream_WAIT_EV.add(WAIT_EV139);


                    // AST REWRITE
                    // elements: WAIT_EV
                    // token labels: 
                    // rule labels: retval
                    // token list labels: 
                    // rule list labels: 
                    // wildcard labels: 
                    if ( state.backtracking==0 ) {

                    retval.tree = root_0;
                    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null);

                    root_0 = (Object)adaptor.nil();
                    // 180:12: -> WAIT_EV
                    {
                        adaptor.addChild(root_0, 
                        new EventStatement(stream_WAIT_EV.nextToken())
                        );

                    }


                    retval.tree = root_0;
                    }

                    }
                    break;
                case 6 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:181:4: READ_EV
                    {
                    READ_EV140=(Token)match(input,READ_EV,FOLLOW_READ_EV_in_event_type1092); if (state.failed) return retval; 
                    if ( state.backtracking==0 ) stream_READ_EV.add(READ_EV140);


                    // AST REWRITE
                    // elements: READ_EV
                    // token labels: 
                    // rule labels: retval
                    // token list labels: 
                    // rule list labels: 
                    // wildcard labels: 
                    if ( state.backtracking==0 ) {

                    retval.tree = root_0;
                    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null);

                    root_0 = (Object)adaptor.nil();
                    // 181:12: -> READ_EV
                    {
                        adaptor.addChild(root_0, 
                        new EventStatement(stream_READ_EV.nextToken())
                        );

                    }


                    retval.tree = root_0;
                    }

                    }
                    break;

            }
            retval.stop = input.LT(-1);


            if ( state.backtracking==0 ) {

            retval.tree = (Object)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }

        finally {
        	// do for sure before leaving
            if ( state.backtracking>0 ) { memoize(input, 24, event_type_StartIndex); }

        }
        return retval;
    }
    // $ANTLR end "event_type"


    public static class semaphore_function_call_return extends ParserRuleReturnScope {
        Object tree;
        public Object getTree() { return tree; }
    };


    // $ANTLR start "semaphore_function_call"
    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:184:1: semaphore_function_call : semaphore_type '(' '&' IDENTIFIER ( ',' unary_expression )? ')' -> ^( semaphore_type IDENTIFIER ( unary_expression )? ) ;
    public final SCPARParser.semaphore_function_call_return semaphore_function_call() throws RecognitionException {
        SCPARParser.semaphore_function_call_return retval = new SCPARParser.semaphore_function_call_return();
        retval.start = input.LT(1);

        int semaphore_function_call_StartIndex = input.index();

        Object root_0 = null;

        Token char_literal142=null;
        Token char_literal143=null;
        Token IDENTIFIER144=null;
        Token char_literal145=null;
        Token char_literal147=null;
        SCPARParser.semaphore_type_return semaphore_type141 =null;

        SCPARParser.unary_expression_return unary_expression146 =null;


        Object char_literal142_tree=null;
        Object char_literal143_tree=null;
        Object IDENTIFIER144_tree=null;
        Object char_literal145_tree=null;
        Object char_literal147_tree=null;
        RewriteRuleTokenStream stream_133=new RewriteRuleTokenStream(adaptor,"token 133");
        RewriteRuleTokenStream stream_IDENTIFIER=new RewriteRuleTokenStream(adaptor,"token IDENTIFIER");
        RewriteRuleTokenStream stream_131=new RewriteRuleTokenStream(adaptor,"token 131");
        RewriteRuleTokenStream stream_ADDRESSOF=new RewriteRuleTokenStream(adaptor,"token ADDRESSOF");
        RewriteRuleTokenStream stream_130=new RewriteRuleTokenStream(adaptor,"token 130");
        RewriteRuleSubtreeStream stream_unary_expression=new RewriteRuleSubtreeStream(adaptor,"rule unary_expression");
        RewriteRuleSubtreeStream stream_semaphore_type=new RewriteRuleSubtreeStream(adaptor,"rule semaphore_type");
        try {
            if ( state.backtracking>0 && alreadyParsedRule(input, 25) ) { return retval; }

            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:185:2: ( semaphore_type '(' '&' IDENTIFIER ( ',' unary_expression )? ')' -> ^( semaphore_type IDENTIFIER ( unary_expression )? ) )
            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:185:4: semaphore_type '(' '&' IDENTIFIER ( ',' unary_expression )? ')'
            {
            pushFollow(FOLLOW_semaphore_type_in_semaphore_function_call1111);
            semaphore_type141=semaphore_type();

            state._fsp--;
            if (state.failed) return retval;
            if ( state.backtracking==0 ) stream_semaphore_type.add(semaphore_type141.getTree());

            char_literal142=(Token)match(input,130,FOLLOW_130_in_semaphore_function_call1113); if (state.failed) return retval; 
            if ( state.backtracking==0 ) stream_130.add(char_literal142);


            char_literal143=(Token)match(input,ADDRESSOF,FOLLOW_ADDRESSOF_in_semaphore_function_call1115); if (state.failed) return retval; 
            if ( state.backtracking==0 ) stream_ADDRESSOF.add(char_literal143);


            IDENTIFIER144=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_semaphore_function_call1117); if (state.failed) return retval; 
            if ( state.backtracking==0 ) stream_IDENTIFIER.add(IDENTIFIER144);


            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:185:38: ( ',' unary_expression )?
            int alt30=2;
            int LA30_0 = input.LA(1);

            if ( (LA30_0==133) ) {
                alt30=1;
            }
            switch (alt30) {
                case 1 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:185:39: ',' unary_expression
                    {
                    char_literal145=(Token)match(input,133,FOLLOW_133_in_semaphore_function_call1120); if (state.failed) return retval; 
                    if ( state.backtracking==0 ) stream_133.add(char_literal145);


                    pushFollow(FOLLOW_unary_expression_in_semaphore_function_call1122);
                    unary_expression146=unary_expression();

                    state._fsp--;
                    if (state.failed) return retval;
                    if ( state.backtracking==0 ) stream_unary_expression.add(unary_expression146.getTree());

                    }
                    break;

            }


            char_literal147=(Token)match(input,131,FOLLOW_131_in_semaphore_function_call1126); if (state.failed) return retval; 
            if ( state.backtracking==0 ) stream_131.add(char_literal147);


            // AST REWRITE
            // elements: unary_expression, IDENTIFIER, semaphore_type
            // token labels: 
            // rule labels: retval
            // token list labels: 
            // rule list labels: 
            // wildcard labels: 
            if ( state.backtracking==0 ) {

            retval.tree = root_0;
            RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null);

            root_0 = (Object)adaptor.nil();
            // 185:66: -> ^( semaphore_type IDENTIFIER ( unary_expression )? )
            {
                // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:185:69: ^( semaphore_type IDENTIFIER ( unary_expression )? )
                {
                Object root_1 = (Object)adaptor.nil();
                root_1 = (Object)adaptor.becomeRoot(stream_semaphore_type.nextNode(), root_1);

                adaptor.addChild(root_1, 
                stream_IDENTIFIER.nextNode()
                );

                // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:185:97: ( unary_expression )?
                if ( stream_unary_expression.hasNext() ) {
                    adaptor.addChild(root_1, stream_unary_expression.nextTree());

                }
                stream_unary_expression.reset();

                adaptor.addChild(root_0, root_1);
                }

            }


            retval.tree = root_0;
            }

            }

            retval.stop = input.LT(-1);


            if ( state.backtracking==0 ) {

            retval.tree = (Object)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }

        finally {
        	// do for sure before leaving
            if ( state.backtracking>0 ) { memoize(input, 25, semaphore_function_call_StartIndex); }

        }
        return retval;
    }
    // $ANTLR end "semaphore_function_call"


    public static class semaphore_type_return extends ParserRuleReturnScope {
        Object tree;
        public Object getTree() { return tree; }
    };


    // $ANTLR start "semaphore_type"
    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:188:1: semaphore_type : ( CREATE_SEM | REMOVE_SEM | LOCK | UNLOCK );
    public final SCPARParser.semaphore_type_return semaphore_type() throws RecognitionException {
        SCPARParser.semaphore_type_return retval = new SCPARParser.semaphore_type_return();
        retval.start = input.LT(1);

        int semaphore_type_StartIndex = input.index();

        Object root_0 = null;

        Token CREATE_SEM148=null;
        Token REMOVE_SEM149=null;
        Token LOCK150=null;
        Token UNLOCK151=null;

        Object CREATE_SEM148_tree=null;
        Object REMOVE_SEM149_tree=null;
        Object LOCK150_tree=null;
        Object UNLOCK151_tree=null;

        try {
            if ( state.backtracking>0 && alreadyParsedRule(input, 26) ) { return retval; }

            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:189:2: ( CREATE_SEM | REMOVE_SEM | LOCK | UNLOCK )
            int alt31=4;
            switch ( input.LA(1) ) {
            case CREATE_SEM:
                {
                alt31=1;
                }
                break;
            case REMOVE_SEM:
                {
                alt31=2;
                }
                break;
            case LOCK:
                {
                alt31=3;
                }
                break;
            case UNLOCK:
                {
                alt31=4;
                }
                break;
            default:
                if (state.backtracking>0) {state.failed=true; return retval;}
                NoViableAltException nvae =
                    new NoViableAltException("", 31, 0, input);

                throw nvae;

            }

            switch (alt31) {
                case 1 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:189:4: CREATE_SEM
                    {
                    root_0 = (Object)adaptor.nil();


                    CREATE_SEM148=(Token)match(input,CREATE_SEM,FOLLOW_CREATE_SEM_in_semaphore_type1149); if (state.failed) return retval;
                    if ( state.backtracking==0 ) {
                    CREATE_SEM148_tree = 
                    new SemaphoreStatement(CREATE_SEM148) 
                    ;
                    adaptor.addChild(root_0, CREATE_SEM148_tree);
                    }

                    }
                    break;
                case 2 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:190:4: REMOVE_SEM
                    {
                    root_0 = (Object)adaptor.nil();


                    REMOVE_SEM149=(Token)match(input,REMOVE_SEM,FOLLOW_REMOVE_SEM_in_semaphore_type1157); if (state.failed) return retval;
                    if ( state.backtracking==0 ) {
                    REMOVE_SEM149_tree = 
                    new SemaphoreStatement(REMOVE_SEM149) 
                    ;
                    adaptor.addChild(root_0, REMOVE_SEM149_tree);
                    }

                    }
                    break;
                case 3 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:191:4: LOCK
                    {
                    root_0 = (Object)adaptor.nil();


                    LOCK150=(Token)match(input,LOCK,FOLLOW_LOCK_in_semaphore_type1165); if (state.failed) return retval;
                    if ( state.backtracking==0 ) {
                    LOCK150_tree = 
                    new SemaphoreStatement(LOCK150) 
                    ;
                    adaptor.addChild(root_0, LOCK150_tree);
                    }

                    }
                    break;
                case 4 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:192:4: UNLOCK
                    {
                    root_0 = (Object)adaptor.nil();


                    UNLOCK151=(Token)match(input,UNLOCK,FOLLOW_UNLOCK_in_semaphore_type1173); if (state.failed) return retval;
                    if ( state.backtracking==0 ) {
                    UNLOCK151_tree = 
                    new SemaphoreStatement(UNLOCK151) 
                    ;
                    adaptor.addChild(root_0, UNLOCK151_tree);
                    }

                    }
                    break;

            }
            retval.stop = input.LT(-1);


            if ( state.backtracking==0 ) {

            retval.tree = (Object)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }

        finally {
        	// do for sure before leaving
            if ( state.backtracking>0 ) { memoize(input, 26, semaphore_type_StartIndex); }

        }
        return retval;
    }
    // $ANTLR end "semaphore_type"


    public static class c_function_call_return extends ParserRuleReturnScope {
        Object tree;
        public Object getTree() { return tree; }
    };


    // $ANTLR start "c_function_call"
    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:195:1: c_function_call : IDENTIFIER '(' ( argument_list )? ')' -> ^( IDENTIFIER '(' ( argument_list )? ')' ) ;
    public final SCPARParser.c_function_call_return c_function_call() throws RecognitionException {
        SCPARParser.c_function_call_return retval = new SCPARParser.c_function_call_return();
        retval.start = input.LT(1);

        int c_function_call_StartIndex = input.index();

        Object root_0 = null;

        Token IDENTIFIER152=null;
        Token char_literal153=null;
        Token char_literal155=null;
        SCPARParser.argument_list_return argument_list154 =null;


        Object IDENTIFIER152_tree=null;
        Object char_literal153_tree=null;
        Object char_literal155_tree=null;
        RewriteRuleTokenStream stream_IDENTIFIER=new RewriteRuleTokenStream(adaptor,"token IDENTIFIER");
        RewriteRuleTokenStream stream_131=new RewriteRuleTokenStream(adaptor,"token 131");
        RewriteRuleTokenStream stream_130=new RewriteRuleTokenStream(adaptor,"token 130");
        RewriteRuleSubtreeStream stream_argument_list=new RewriteRuleSubtreeStream(adaptor,"rule argument_list");
        try {
            if ( state.backtracking>0 && alreadyParsedRule(input, 27) ) { return retval; }

            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:196:2: ( IDENTIFIER '(' ( argument_list )? ')' -> ^( IDENTIFIER '(' ( argument_list )? ')' ) )
            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:196:4: IDENTIFIER '(' ( argument_list )? ')'
            {
            IDENTIFIER152=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_c_function_call1187); if (state.failed) return retval; 
            if ( state.backtracking==0 ) stream_IDENTIFIER.add(IDENTIFIER152);


            char_literal153=(Token)match(input,130,FOLLOW_130_in_c_function_call1189); if (state.failed) return retval; 
            if ( state.backtracking==0 ) stream_130.add(char_literal153);


            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:196:19: ( argument_list )?
            int alt32=2;
            int LA32_0 = input.LA(1);

            if ( ((LA32_0 >= ADDRESSOF && LA32_0 <= ALLOC_PROC)||LA32_0==BITWISE_NOT||LA32_0==CHARACTER_LITERAL||(LA32_0 >= CREATE && LA32_0 <= DECIMAL_LITERAL)||LA32_0==FLOATING_POINT_LITERAL||LA32_0==HEX_LITERAL||LA32_0==IDENTIFIER||LA32_0==INDIRECTION||LA32_0==LOCK||LA32_0==MINUS||LA32_0==NOT||LA32_0==OCTAL_LITERAL||(LA32_0 >= PLUS && LA32_0 <= READ_EV)||(LA32_0 >= REMOVE_SEM && LA32_0 <= RES_EV)||LA32_0==SET_EV||LA32_0==STRING_LITERAL||LA32_0==UNLOCK||(LA32_0 >= WAIT_ALL && LA32_0 <= WAIT_EV)||LA32_0==130||LA32_0==132||LA32_0==134) ) {
                alt32=1;
            }
            switch (alt32) {
                case 1 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:196:19: argument_list
                    {
                    pushFollow(FOLLOW_argument_list_in_c_function_call1191);
                    argument_list154=argument_list();

                    state._fsp--;
                    if (state.failed) return retval;
                    if ( state.backtracking==0 ) stream_argument_list.add(argument_list154.getTree());

                    }
                    break;

            }


            char_literal155=(Token)match(input,131,FOLLOW_131_in_c_function_call1194); if (state.failed) return retval; 
            if ( state.backtracking==0 ) stream_131.add(char_literal155);


            // AST REWRITE
            // elements: 131, 130, IDENTIFIER, argument_list
            // token labels: 
            // rule labels: retval
            // token list labels: 
            // rule list labels: 
            // wildcard labels: 
            if ( state.backtracking==0 ) {

            retval.tree = root_0;
            RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null);

            root_0 = (Object)adaptor.nil();
            // 196:38: -> ^( IDENTIFIER '(' ( argument_list )? ')' )
            {
                // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:196:41: ^( IDENTIFIER '(' ( argument_list )? ')' )
                {
                Object root_1 = (Object)adaptor.nil();
                root_1 = (Object)adaptor.becomeRoot(
                stream_IDENTIFIER.nextNode()
                , root_1);

                adaptor.addChild(root_1, 
                stream_130.nextNode()
                );

                // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:196:58: ( argument_list )?
                if ( stream_argument_list.hasNext() ) {
                    adaptor.addChild(root_1, stream_argument_list.nextTree());

                }
                stream_argument_list.reset();

                adaptor.addChild(root_1, 
                stream_131.nextNode()
                );

                adaptor.addChild(root_0, root_1);
                }

            }


            retval.tree = root_0;
            }

            }

            retval.stop = input.LT(-1);


            if ( state.backtracking==0 ) {

            retval.tree = (Object)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }

        finally {
        	// do for sure before leaving
            if ( state.backtracking>0 ) { memoize(input, 27, c_function_call_StartIndex); }

        }
        return retval;
    }
    // $ANTLR end "c_function_call"


    public static class argument_list_return extends ParserRuleReturnScope {
        Object tree;
        public Object getTree() { return tree; }
    };


    // $ANTLR start "argument_list"
    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:199:1: argument_list : argument ( ',' argument )* -> ( argument )+ ;
    public final SCPARParser.argument_list_return argument_list() throws RecognitionException {
        SCPARParser.argument_list_return retval = new SCPARParser.argument_list_return();
        retval.start = input.LT(1);

        int argument_list_StartIndex = input.index();

        Object root_0 = null;

        Token char_literal157=null;
        SCPARParser.argument_return argument156 =null;

        SCPARParser.argument_return argument158 =null;


        Object char_literal157_tree=null;
        RewriteRuleTokenStream stream_133=new RewriteRuleTokenStream(adaptor,"token 133");
        RewriteRuleSubtreeStream stream_argument=new RewriteRuleSubtreeStream(adaptor,"rule argument");
        try {
            if ( state.backtracking>0 && alreadyParsedRule(input, 28) ) { return retval; }

            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:200:2: ( argument ( ',' argument )* -> ( argument )+ )
            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:200:4: argument ( ',' argument )*
            {
            pushFollow(FOLLOW_argument_in_argument_list1219);
            argument156=argument();

            state._fsp--;
            if (state.failed) return retval;
            if ( state.backtracking==0 ) stream_argument.add(argument156.getTree());

            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:200:13: ( ',' argument )*
            loop33:
            do {
                int alt33=2;
                int LA33_0 = input.LA(1);

                if ( (LA33_0==133) ) {
                    alt33=1;
                }


                switch (alt33) {
            	case 1 :
            	    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:200:14: ',' argument
            	    {
            	    char_literal157=(Token)match(input,133,FOLLOW_133_in_argument_list1222); if (state.failed) return retval; 
            	    if ( state.backtracking==0 ) stream_133.add(char_literal157);


            	    pushFollow(FOLLOW_argument_in_argument_list1224);
            	    argument158=argument();

            	    state._fsp--;
            	    if (state.failed) return retval;
            	    if ( state.backtracking==0 ) stream_argument.add(argument158.getTree());

            	    }
            	    break;

            	default :
            	    break loop33;
                }
            } while (true);


            // AST REWRITE
            // elements: argument
            // token labels: 
            // rule labels: retval
            // token list labels: 
            // rule list labels: 
            // wildcard labels: 
            if ( state.backtracking==0 ) {

            retval.tree = root_0;
            RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null);

            root_0 = (Object)adaptor.nil();
            // 200:29: -> ( argument )+
            {
                if ( !(stream_argument.hasNext()) ) {
                    throw new RewriteEarlyExitException();
                }
                while ( stream_argument.hasNext() ) {
                    adaptor.addChild(root_0, stream_argument.nextTree());

                }
                stream_argument.reset();

            }


            retval.tree = root_0;
            }

            }

            retval.stop = input.LT(-1);


            if ( state.backtracking==0 ) {

            retval.tree = (Object)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }

        finally {
        	// do for sure before leaving
            if ( state.backtracking>0 ) { memoize(input, 28, argument_list_StartIndex); }

        }
        return retval;
    }
    // $ANTLR end "argument_list"


    public static class argument_return extends ParserRuleReturnScope {
        Object tree;
        public Object getTree() { return tree; }
    };


    // $ANTLR start "argument"
    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:203:1: argument : expression -> ^( ARG expression ) ;
    public final SCPARParser.argument_return argument() throws RecognitionException {
        SCPARParser.argument_return retval = new SCPARParser.argument_return();
        retval.start = input.LT(1);

        int argument_StartIndex = input.index();

        Object root_0 = null;

        SCPARParser.expression_return expression159 =null;


        RewriteRuleSubtreeStream stream_expression=new RewriteRuleSubtreeStream(adaptor,"rule expression");
        try {
            if ( state.backtracking>0 && alreadyParsedRule(input, 29) ) { return retval; }

            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:204:2: ( expression -> ^( ARG expression ) )
            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:204:4: expression
            {
            pushFollow(FOLLOW_expression_in_argument1243);
            expression159=expression();

            state._fsp--;
            if (state.failed) return retval;
            if ( state.backtracking==0 ) stream_expression.add(expression159.getTree());

            // AST REWRITE
            // elements: expression
            // token labels: 
            // rule labels: retval
            // token list labels: 
            // rule list labels: 
            // wildcard labels: 
            if ( state.backtracking==0 ) {

            retval.tree = root_0;
            RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null);

            root_0 = (Object)adaptor.nil();
            // 204:15: -> ^( ARG expression )
            {
                // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:204:18: ^( ARG expression )
                {
                Object root_1 = (Object)adaptor.nil();
                root_1 = (Object)adaptor.becomeRoot(
                (Object)adaptor.create(ARG, "ARG")
                , root_1);

                adaptor.addChild(root_1, stream_expression.nextTree());

                adaptor.addChild(root_0, root_1);
                }

            }


            retval.tree = root_0;
            }

            }

            retval.stop = input.LT(-1);


            if ( state.backtracking==0 ) {

            retval.tree = (Object)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }

        finally {
        	// do for sure before leaving
            if ( state.backtracking>0 ) { memoize(input, 29, argument_StartIndex); }

        }
        return retval;
    }
    // $ANTLR end "argument"


    public static class expression_return extends ParserRuleReturnScope {
        Object tree;
        public Object getTree() { return tree; }
    };


    // $ANTLR start "expression"
    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:207:1: expression : assignment_expression ( ',' assignment_expression )* -> ( assignment_expression )+ ;
    public final SCPARParser.expression_return expression() throws RecognitionException {
        SCPARParser.expression_return retval = new SCPARParser.expression_return();
        retval.start = input.LT(1);

        int expression_StartIndex = input.index();

        Object root_0 = null;

        Token char_literal161=null;
        SCPARParser.assignment_expression_return assignment_expression160 =null;

        SCPARParser.assignment_expression_return assignment_expression162 =null;


        Object char_literal161_tree=null;
        RewriteRuleTokenStream stream_133=new RewriteRuleTokenStream(adaptor,"token 133");
        RewriteRuleSubtreeStream stream_assignment_expression=new RewriteRuleSubtreeStream(adaptor,"rule assignment_expression");
        try {
            if ( state.backtracking>0 && alreadyParsedRule(input, 30) ) { return retval; }

            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:208:2: ( assignment_expression ( ',' assignment_expression )* -> ( assignment_expression )+ )
            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:208:4: assignment_expression ( ',' assignment_expression )*
            {
            pushFollow(FOLLOW_assignment_expression_in_expression1263);
            assignment_expression160=assignment_expression();

            state._fsp--;
            if (state.failed) return retval;
            if ( state.backtracking==0 ) stream_assignment_expression.add(assignment_expression160.getTree());

            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:208:26: ( ',' assignment_expression )*
            loop34:
            do {
                int alt34=2;
                int LA34_0 = input.LA(1);

                if ( (LA34_0==133) ) {
                    int LA34_41 = input.LA(2);

                    if ( (synpred54_SCPAR()) ) {
                        alt34=1;
                    }


                }


                switch (alt34) {
            	case 1 :
            	    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:208:27: ',' assignment_expression
            	    {
            	    char_literal161=(Token)match(input,133,FOLLOW_133_in_expression1266); if (state.failed) return retval; 
            	    if ( state.backtracking==0 ) stream_133.add(char_literal161);


            	    pushFollow(FOLLOW_assignment_expression_in_expression1268);
            	    assignment_expression162=assignment_expression();

            	    state._fsp--;
            	    if (state.failed) return retval;
            	    if ( state.backtracking==0 ) stream_assignment_expression.add(assignment_expression162.getTree());

            	    }
            	    break;

            	default :
            	    break loop34;
                }
            } while (true);


            // AST REWRITE
            // elements: assignment_expression
            // token labels: 
            // rule labels: retval
            // token list labels: 
            // rule list labels: 
            // wildcard labels: 
            if ( state.backtracking==0 ) {

            retval.tree = root_0;
            RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null);

            root_0 = (Object)adaptor.nil();
            // 208:55: -> ( assignment_expression )+
            {
                if ( !(stream_assignment_expression.hasNext()) ) {
                    throw new RewriteEarlyExitException();
                }
                while ( stream_assignment_expression.hasNext() ) {
                    adaptor.addChild(root_0, stream_assignment_expression.nextTree());

                }
                stream_assignment_expression.reset();

            }


            retval.tree = root_0;
            }

            }

            retval.stop = input.LT(-1);


            if ( state.backtracking==0 ) {

            retval.tree = (Object)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }

        finally {
        	// do for sure before leaving
            if ( state.backtracking>0 ) { memoize(input, 30, expression_StartIndex); }

        }
        return retval;
    }
    // $ANTLR end "expression"


    public static class assignment_expression_return extends ParserRuleReturnScope {
        Object tree;
        public Object getTree() { return tree; }
    };


    // $ANTLR start "assignment_expression"
    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:211:1: assignment_expression : ( lvalue assignment_operator assignment_expression -> ^( assignment_operator lvalue assignment_expression ) | conditional_expression );
    public final SCPARParser.assignment_expression_return assignment_expression() throws RecognitionException {
        SCPARParser.assignment_expression_return retval = new SCPARParser.assignment_expression_return();
        retval.start = input.LT(1);

        int assignment_expression_StartIndex = input.index();

        Object root_0 = null;

        SCPARParser.lvalue_return lvalue163 =null;

        SCPARParser.assignment_operator_return assignment_operator164 =null;

        SCPARParser.assignment_expression_return assignment_expression165 =null;

        SCPARParser.conditional_expression_return conditional_expression166 =null;


        RewriteRuleSubtreeStream stream_lvalue=new RewriteRuleSubtreeStream(adaptor,"rule lvalue");
        RewriteRuleSubtreeStream stream_assignment_operator=new RewriteRuleSubtreeStream(adaptor,"rule assignment_operator");
        RewriteRuleSubtreeStream stream_assignment_expression=new RewriteRuleSubtreeStream(adaptor,"rule assignment_expression");
        try {
            if ( state.backtracking>0 && alreadyParsedRule(input, 31) ) { return retval; }

            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:212:2: ( lvalue assignment_operator assignment_expression -> ^( assignment_operator lvalue assignment_expression ) | conditional_expression )
            int alt35=2;
            switch ( input.LA(1) ) {
            case 132:
            case 134:
                {
                int LA35_1 = input.LA(2);

                if ( (synpred55_SCPAR()) ) {
                    alt35=1;
                }
                else if ( (true) ) {
                    alt35=2;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return retval;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 35, 1, input);

                    throw nvae;

                }
                }
                break;
            case ADDRESSOF:
            case BITWISE_NOT:
            case INDIRECTION:
            case MINUS:
            case NOT:
            case PLUS:
                {
                int LA35_2 = input.LA(2);

                if ( (synpred55_SCPAR()) ) {
                    alt35=1;
                }
                else if ( (true) ) {
                    alt35=2;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return retval;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 35, 2, input);

                    throw nvae;

                }
                }
                break;
            case HEX_LITERAL:
                {
                int LA35_3 = input.LA(2);

                if ( (synpred55_SCPAR()) ) {
                    alt35=1;
                }
                else if ( (true) ) {
                    alt35=2;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return retval;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 35, 3, input);

                    throw nvae;

                }
                }
                break;
            case OCTAL_LITERAL:
                {
                int LA35_4 = input.LA(2);

                if ( (synpred55_SCPAR()) ) {
                    alt35=1;
                }
                else if ( (true) ) {
                    alt35=2;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return retval;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 35, 4, input);

                    throw nvae;

                }
                }
                break;
            case DECIMAL_LITERAL:
                {
                int LA35_5 = input.LA(2);

                if ( (synpred55_SCPAR()) ) {
                    alt35=1;
                }
                else if ( (true) ) {
                    alt35=2;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return retval;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 35, 5, input);

                    throw nvae;

                }
                }
                break;
            case CHARACTER_LITERAL:
                {
                int LA35_6 = input.LA(2);

                if ( (synpred55_SCPAR()) ) {
                    alt35=1;
                }
                else if ( (true) ) {
                    alt35=2;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return retval;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 35, 6, input);

                    throw nvae;

                }
                }
                break;
            case STRING_LITERAL:
                {
                int LA35_7 = input.LA(2);

                if ( (synpred55_SCPAR()) ) {
                    alt35=1;
                }
                else if ( (true) ) {
                    alt35=2;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return retval;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 35, 7, input);

                    throw nvae;

                }
                }
                break;
            case FLOATING_POINT_LITERAL:
                {
                int LA35_8 = input.LA(2);

                if ( (synpred55_SCPAR()) ) {
                    alt35=1;
                }
                else if ( (true) ) {
                    alt35=2;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return retval;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 35, 8, input);

                    throw nvae;

                }
                }
                break;
            case 130:
                {
                int LA35_9 = input.LA(2);

                if ( (synpred55_SCPAR()) ) {
                    alt35=1;
                }
                else if ( (true) ) {
                    alt35=2;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return retval;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 35, 9, input);

                    throw nvae;

                }
                }
                break;
            case IDENTIFIER:
                {
                int LA35_10 = input.LA(2);

                if ( (synpred55_SCPAR()) ) {
                    alt35=1;
                }
                else if ( (true) ) {
                    alt35=2;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return retval;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 35, 10, input);

                    throw nvae;

                }
                }
                break;
            case CREATE_SEM:
                {
                int LA35_11 = input.LA(2);

                if ( (synpred55_SCPAR()) ) {
                    alt35=1;
                }
                else if ( (true) ) {
                    alt35=2;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return retval;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 35, 11, input);

                    throw nvae;

                }
                }
                break;
            case REMOVE_SEM:
                {
                int LA35_12 = input.LA(2);

                if ( (synpred55_SCPAR()) ) {
                    alt35=1;
                }
                else if ( (true) ) {
                    alt35=2;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return retval;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 35, 12, input);

                    throw nvae;

                }
                }
                break;
            case LOCK:
                {
                int LA35_13 = input.LA(2);

                if ( (synpred55_SCPAR()) ) {
                    alt35=1;
                }
                else if ( (true) ) {
                    alt35=2;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return retval;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 35, 13, input);

                    throw nvae;

                }
                }
                break;
            case UNLOCK:
                {
                int LA35_14 = input.LA(2);

                if ( (synpred55_SCPAR()) ) {
                    alt35=1;
                }
                else if ( (true) ) {
                    alt35=2;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return retval;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 35, 14, input);

                    throw nvae;

                }
                }
                break;
            case CREATE_EV:
                {
                int LA35_15 = input.LA(2);

                if ( (synpred55_SCPAR()) ) {
                    alt35=1;
                }
                else if ( (true) ) {
                    alt35=2;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return retval;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 35, 15, input);

                    throw nvae;

                }
                }
                break;
            case SET_EV:
                {
                int LA35_16 = input.LA(2);

                if ( (synpred55_SCPAR()) ) {
                    alt35=1;
                }
                else if ( (true) ) {
                    alt35=2;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return retval;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 35, 16, input);

                    throw nvae;

                }
                }
                break;
            case REM_EV:
                {
                int LA35_17 = input.LA(2);

                if ( (synpred55_SCPAR()) ) {
                    alt35=1;
                }
                else if ( (true) ) {
                    alt35=2;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return retval;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 35, 17, input);

                    throw nvae;

                }
                }
                break;
            case RES_EV:
                {
                int LA35_18 = input.LA(2);

                if ( (synpred55_SCPAR()) ) {
                    alt35=1;
                }
                else if ( (true) ) {
                    alt35=2;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return retval;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 35, 18, input);

                    throw nvae;

                }
                }
                break;
            case WAIT_EV:
                {
                int LA35_19 = input.LA(2);

                if ( (synpred55_SCPAR()) ) {
                    alt35=1;
                }
                else if ( (true) ) {
                    alt35=2;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return retval;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 35, 19, input);

                    throw nvae;

                }
                }
                break;
            case READ_EV:
                {
                int LA35_20 = input.LA(2);

                if ( (synpred55_SCPAR()) ) {
                    alt35=1;
                }
                else if ( (true) ) {
                    alt35=2;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return retval;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 35, 20, input);

                    throw nvae;

                }
                }
                break;
            case ALLOC_PROC:
                {
                int LA35_21 = input.LA(2);

                if ( (synpred55_SCPAR()) ) {
                    alt35=1;
                }
                else if ( (true) ) {
                    alt35=2;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return retval;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 35, 21, input);

                    throw nvae;

                }
                }
                break;
            case CREATE:
                {
                int LA35_22 = input.LA(2);

                if ( (synpred55_SCPAR()) ) {
                    alt35=1;
                }
                else if ( (true) ) {
                    alt35=2;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return retval;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 35, 22, input);

                    throw nvae;

                }
                }
                break;
            case WAIT_ALL:
                {
                int LA35_23 = input.LA(2);

                if ( (synpred55_SCPAR()) ) {
                    alt35=1;
                }
                else if ( (true) ) {
                    alt35=2;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return retval;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 35, 23, input);

                    throw nvae;

                }
                }
                break;
            default:
                if (state.backtracking>0) {state.failed=true; return retval;}
                NoViableAltException nvae =
                    new NoViableAltException("", 35, 0, input);

                throw nvae;

            }

            switch (alt35) {
                case 1 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:212:4: lvalue assignment_operator assignment_expression
                    {
                    pushFollow(FOLLOW_lvalue_in_assignment_expression1286);
                    lvalue163=lvalue();

                    state._fsp--;
                    if (state.failed) return retval;
                    if ( state.backtracking==0 ) stream_lvalue.add(lvalue163.getTree());

                    pushFollow(FOLLOW_assignment_operator_in_assignment_expression1288);
                    assignment_operator164=assignment_operator();

                    state._fsp--;
                    if (state.failed) return retval;
                    if ( state.backtracking==0 ) stream_assignment_operator.add(assignment_operator164.getTree());

                    pushFollow(FOLLOW_assignment_expression_in_assignment_expression1290);
                    assignment_expression165=assignment_expression();

                    state._fsp--;
                    if (state.failed) return retval;
                    if ( state.backtracking==0 ) stream_assignment_expression.add(assignment_expression165.getTree());

                    // AST REWRITE
                    // elements: lvalue, assignment_expression, assignment_operator
                    // token labels: 
                    // rule labels: retval
                    // token list labels: 
                    // rule list labels: 
                    // wildcard labels: 
                    if ( state.backtracking==0 ) {

                    retval.tree = root_0;
                    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null);

                    root_0 = (Object)adaptor.nil();
                    // 212:53: -> ^( assignment_operator lvalue assignment_expression )
                    {
                        // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:212:56: ^( assignment_operator lvalue assignment_expression )
                        {
                        Object root_1 = (Object)adaptor.nil();
                        root_1 = (Object)adaptor.becomeRoot(stream_assignment_operator.nextNode(), root_1);

                        adaptor.addChild(root_1, stream_lvalue.nextTree());

                        adaptor.addChild(root_1, stream_assignment_expression.nextTree());

                        adaptor.addChild(root_0, root_1);
                        }

                    }


                    retval.tree = root_0;
                    }

                    }
                    break;
                case 2 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:213:4: conditional_expression
                    {
                    root_0 = (Object)adaptor.nil();


                    pushFollow(FOLLOW_conditional_expression_in_assignment_expression1305);
                    conditional_expression166=conditional_expression();

                    state._fsp--;
                    if (state.failed) return retval;
                    if ( state.backtracking==0 ) adaptor.addChild(root_0, conditional_expression166.getTree());

                    }
                    break;

            }
            retval.stop = input.LT(-1);


            if ( state.backtracking==0 ) {

            retval.tree = (Object)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }

        finally {
        	// do for sure before leaving
            if ( state.backtracking>0 ) { memoize(input, 31, assignment_expression_StartIndex); }

        }
        return retval;
    }
    // $ANTLR end "assignment_expression"


    public static class conditional_expression_return extends ParserRuleReturnScope {
        Object tree;
        public Object getTree() { return tree; }
    };


    // $ANTLR start "conditional_expression"
    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:216:1: conditional_expression : binary_expression ( '?' expression ':' conditional_expression )? -> binary_expression ( expression conditional_expression )? ;
    public final SCPARParser.conditional_expression_return conditional_expression() throws RecognitionException {
        SCPARParser.conditional_expression_return retval = new SCPARParser.conditional_expression_return();
        retval.start = input.LT(1);

        int conditional_expression_StartIndex = input.index();

        Object root_0 = null;

        Token char_literal168=null;
        Token char_literal170=null;
        SCPARParser.binary_expression_return binary_expression167 =null;

        SCPARParser.expression_return expression169 =null;

        SCPARParser.conditional_expression_return conditional_expression171 =null;


        Object char_literal168_tree=null;
        Object char_literal170_tree=null;
        RewriteRuleTokenStream stream_139=new RewriteRuleTokenStream(adaptor,"token 139");
        RewriteRuleTokenStream stream_137=new RewriteRuleTokenStream(adaptor,"token 137");
        RewriteRuleSubtreeStream stream_expression=new RewriteRuleSubtreeStream(adaptor,"rule expression");
        RewriteRuleSubtreeStream stream_conditional_expression=new RewriteRuleSubtreeStream(adaptor,"rule conditional_expression");
        RewriteRuleSubtreeStream stream_binary_expression=new RewriteRuleSubtreeStream(adaptor,"rule binary_expression");
        try {
            if ( state.backtracking>0 && alreadyParsedRule(input, 32) ) { return retval; }

            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:217:2: ( binary_expression ( '?' expression ':' conditional_expression )? -> binary_expression ( expression conditional_expression )? )
            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:217:4: binary_expression ( '?' expression ':' conditional_expression )?
            {
            pushFollow(FOLLOW_binary_expression_in_conditional_expression1316);
            binary_expression167=binary_expression();

            state._fsp--;
            if (state.failed) return retval;
            if ( state.backtracking==0 ) stream_binary_expression.add(binary_expression167.getTree());

            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:217:22: ( '?' expression ':' conditional_expression )?
            int alt36=2;
            int LA36_0 = input.LA(1);

            if ( (LA36_0==139) ) {
                alt36=1;
            }
            switch (alt36) {
                case 1 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:217:23: '?' expression ':' conditional_expression
                    {
                    char_literal168=(Token)match(input,139,FOLLOW_139_in_conditional_expression1319); if (state.failed) return retval; 
                    if ( state.backtracking==0 ) stream_139.add(char_literal168);


                    pushFollow(FOLLOW_expression_in_conditional_expression1321);
                    expression169=expression();

                    state._fsp--;
                    if (state.failed) return retval;
                    if ( state.backtracking==0 ) stream_expression.add(expression169.getTree());

                    char_literal170=(Token)match(input,137,FOLLOW_137_in_conditional_expression1323); if (state.failed) return retval; 
                    if ( state.backtracking==0 ) stream_137.add(char_literal170);


                    pushFollow(FOLLOW_conditional_expression_in_conditional_expression1325);
                    conditional_expression171=conditional_expression();

                    state._fsp--;
                    if (state.failed) return retval;
                    if ( state.backtracking==0 ) stream_conditional_expression.add(conditional_expression171.getTree());

                    }
                    break;

            }


            // AST REWRITE
            // elements: conditional_expression, binary_expression, expression
            // token labels: 
            // rule labels: retval
            // token list labels: 
            // rule list labels: 
            // wildcard labels: 
            if ( state.backtracking==0 ) {

            retval.tree = root_0;
            RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null);

            root_0 = (Object)adaptor.nil();
            // 217:67: -> binary_expression ( expression conditional_expression )?
            {
                adaptor.addChild(root_0, stream_binary_expression.nextTree());

                // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:217:88: ( expression conditional_expression )?
                if ( stream_conditional_expression.hasNext()||stream_expression.hasNext() ) {
                    adaptor.addChild(root_0, stream_expression.nextTree());

                    adaptor.addChild(root_0, stream_conditional_expression.nextTree());

                }
                stream_conditional_expression.reset();
                stream_expression.reset();

            }


            retval.tree = root_0;
            }

            }

            retval.stop = input.LT(-1);


            if ( state.backtracking==0 ) {

            retval.tree = (Object)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }

        finally {
        	// do for sure before leaving
            if ( state.backtracking>0 ) { memoize(input, 32, conditional_expression_StartIndex); }

        }
        return retval;
    }
    // $ANTLR end "conditional_expression"


    public static class binary_expression_return extends ParserRuleReturnScope {
        Object tree;
        public Object getTree() { return tree; }
    };


    // $ANTLR start "binary_expression"
    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:220:1: binary_expression : cast_expression ( operator cast_expression )* -> ( cast_expression )+ ;
    public final SCPARParser.binary_expression_return binary_expression() throws RecognitionException {
        SCPARParser.binary_expression_return retval = new SCPARParser.binary_expression_return();
        retval.start = input.LT(1);

        int binary_expression_StartIndex = input.index();

        Object root_0 = null;

        SCPARParser.cast_expression_return cast_expression172 =null;

        SCPARParser.operator_return operator173 =null;

        SCPARParser.cast_expression_return cast_expression174 =null;


        RewriteRuleSubtreeStream stream_cast_expression=new RewriteRuleSubtreeStream(adaptor,"rule cast_expression");
        RewriteRuleSubtreeStream stream_operator=new RewriteRuleSubtreeStream(adaptor,"rule operator");
        try {
            if ( state.backtracking>0 && alreadyParsedRule(input, 33) ) { return retval; }

            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:221:2: ( cast_expression ( operator cast_expression )* -> ( cast_expression )+ )
            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:221:4: cast_expression ( operator cast_expression )*
            {
            pushFollow(FOLLOW_cast_expression_in_binary_expression1350);
            cast_expression172=cast_expression();

            state._fsp--;
            if (state.failed) return retval;
            if ( state.backtracking==0 ) stream_cast_expression.add(cast_expression172.getTree());

            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:221:20: ( operator cast_expression )*
            loop37:
            do {
                int alt37=2;
                int LA37_0 = input.LA(1);

                if ( (LA37_0==INDIRECTION||LA37_0==MINUS||LA37_0==PLUS) ) {
                    int LA37_24 = input.LA(2);

                    if ( (synpred57_SCPAR()) ) {
                        alt37=1;
                    }


                }
                else if ( ((LA37_0 >= BITWISE_OR && LA37_0 <= BITWISE_XOR)||LA37_0==EQUALS||(LA37_0 >= GREATER_EQUALS && LA37_0 <= GREATER_THAN)||(LA37_0 >= LEFT_SHIFT && LA37_0 <= LESS_THAN)||(LA37_0 >= LOGICAL_AND && LA37_0 <= LOGICAL_OR)||LA37_0==NOT_EQUALS||LA37_0==RIGHT_SHIFT||LA37_0==129||LA37_0==136) ) {
                    alt37=1;
                }


                switch (alt37) {
            	case 1 :
            	    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:221:21: operator cast_expression
            	    {
            	    pushFollow(FOLLOW_operator_in_binary_expression1353);
            	    operator173=operator();

            	    state._fsp--;
            	    if (state.failed) return retval;
            	    if ( state.backtracking==0 ) stream_operator.add(operator173.getTree());

            	    pushFollow(FOLLOW_cast_expression_in_binary_expression1355);
            	    cast_expression174=cast_expression();

            	    state._fsp--;
            	    if (state.failed) return retval;
            	    if ( state.backtracking==0 ) stream_cast_expression.add(cast_expression174.getTree());

            	    }
            	    break;

            	default :
            	    break loop37;
                }
            } while (true);


            // AST REWRITE
            // elements: cast_expression
            // token labels: 
            // rule labels: retval
            // token list labels: 
            // rule list labels: 
            // wildcard labels: 
            if ( state.backtracking==0 ) {

            retval.tree = root_0;
            RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null);

            root_0 = (Object)adaptor.nil();
            // 221:48: -> ( cast_expression )+
            {
                if ( !(stream_cast_expression.hasNext()) ) {
                    throw new RewriteEarlyExitException();
                }
                while ( stream_cast_expression.hasNext() ) {
                    adaptor.addChild(root_0, stream_cast_expression.nextTree());

                }
                stream_cast_expression.reset();

            }


            retval.tree = root_0;
            }

            }

            retval.stop = input.LT(-1);


            if ( state.backtracking==0 ) {

            retval.tree = (Object)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }

        finally {
        	// do for sure before leaving
            if ( state.backtracking>0 ) { memoize(input, 33, binary_expression_StartIndex); }

        }
        return retval;
    }
    // $ANTLR end "binary_expression"


    public static class operator_return extends ParserRuleReturnScope {
        Object tree;
        public Object getTree() { return tree; }
    };


    // $ANTLR start "operator"
    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:224:1: operator : ( PLUS | MINUS | '*' | '/' | '%' | LEFT_SHIFT | RIGHT_SHIFT | LOGICAL_OR | LOGICAL_AND | BITWISE_OR | BITWISE_XOR | EQUALS | NOT_EQUALS | LESS_THAN | GREATER_THAN | LESS_EQUALS | GREATER_EQUALS );
    public final SCPARParser.operator_return operator() throws RecognitionException {
        SCPARParser.operator_return retval = new SCPARParser.operator_return();
        retval.start = input.LT(1);

        int operator_StartIndex = input.index();

        Object root_0 = null;

        Token set175=null;

        Object set175_tree=null;

        try {
            if ( state.backtracking>0 && alreadyParsedRule(input, 34) ) { return retval; }

            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:225:2: ( PLUS | MINUS | '*' | '/' | '%' | LEFT_SHIFT | RIGHT_SHIFT | LOGICAL_OR | LOGICAL_AND | BITWISE_OR | BITWISE_XOR | EQUALS | NOT_EQUALS | LESS_THAN | GREATER_THAN | LESS_EQUALS | GREATER_EQUALS )
            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:
            {
            root_0 = (Object)adaptor.nil();


            set175=(Token)input.LT(1);

            if ( (input.LA(1) >= BITWISE_OR && input.LA(1) <= BITWISE_XOR)||input.LA(1)==EQUALS||(input.LA(1) >= GREATER_EQUALS && input.LA(1) <= GREATER_THAN)||input.LA(1)==INDIRECTION||(input.LA(1) >= LEFT_SHIFT && input.LA(1) <= LESS_THAN)||(input.LA(1) >= LOGICAL_AND && input.LA(1) <= LOGICAL_OR)||input.LA(1)==MINUS||input.LA(1)==NOT_EQUALS||input.LA(1)==PLUS||input.LA(1)==RIGHT_SHIFT||input.LA(1)==129||input.LA(1)==136 ) {
                input.consume();
                if ( state.backtracking==0 ) adaptor.addChild(root_0, 
                (Object)adaptor.create(set175)
                );
                state.errorRecovery=false;
                state.failed=false;
            }
            else {
                if (state.backtracking>0) {state.failed=true; return retval;}
                MismatchedSetException mse = new MismatchedSetException(null,input);
                throw mse;
            }


            }

            retval.stop = input.LT(-1);


            if ( state.backtracking==0 ) {

            retval.tree = (Object)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }

        finally {
        	// do for sure before leaving
            if ( state.backtracking>0 ) { memoize(input, 34, operator_StartIndex); }

        }
        return retval;
    }
    // $ANTLR end "operator"


    public static class cast_expression_return extends ParserRuleReturnScope {
        Object tree;
        public Object getTree() { return tree; }
    };


    // $ANTLR start "cast_expression"
    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:244:1: cast_expression : ( '(' ( IDENTIFIER | '*' )+ ')' cast_expression -> cast_expression | unary_expression );
    public final SCPARParser.cast_expression_return cast_expression() throws RecognitionException {
        SCPARParser.cast_expression_return retval = new SCPARParser.cast_expression_return();
        retval.start = input.LT(1);

        int cast_expression_StartIndex = input.index();

        Object root_0 = null;

        Token char_literal176=null;
        Token IDENTIFIER177=null;
        Token char_literal178=null;
        Token char_literal179=null;
        SCPARParser.cast_expression_return cast_expression180 =null;

        SCPARParser.unary_expression_return unary_expression181 =null;


        Object char_literal176_tree=null;
        Object IDENTIFIER177_tree=null;
        Object char_literal178_tree=null;
        Object char_literal179_tree=null;
        RewriteRuleTokenStream stream_INDIRECTION=new RewriteRuleTokenStream(adaptor,"token INDIRECTION");
        RewriteRuleTokenStream stream_IDENTIFIER=new RewriteRuleTokenStream(adaptor,"token IDENTIFIER");
        RewriteRuleTokenStream stream_131=new RewriteRuleTokenStream(adaptor,"token 131");
        RewriteRuleTokenStream stream_130=new RewriteRuleTokenStream(adaptor,"token 130");
        RewriteRuleSubtreeStream stream_cast_expression=new RewriteRuleSubtreeStream(adaptor,"rule cast_expression");
        try {
            if ( state.backtracking>0 && alreadyParsedRule(input, 35) ) { return retval; }

            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:245:2: ( '(' ( IDENTIFIER | '*' )+ ')' cast_expression -> cast_expression | unary_expression )
            int alt39=2;
            int LA39_0 = input.LA(1);

            if ( (LA39_0==130) ) {
                int LA39_1 = input.LA(2);

                if ( (synpred76_SCPAR()) ) {
                    alt39=1;
                }
                else if ( (true) ) {
                    alt39=2;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return retval;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 39, 1, input);

                    throw nvae;

                }
            }
            else if ( ((LA39_0 >= ADDRESSOF && LA39_0 <= ALLOC_PROC)||LA39_0==BITWISE_NOT||LA39_0==CHARACTER_LITERAL||(LA39_0 >= CREATE && LA39_0 <= DECIMAL_LITERAL)||LA39_0==FLOATING_POINT_LITERAL||LA39_0==HEX_LITERAL||LA39_0==IDENTIFIER||LA39_0==INDIRECTION||LA39_0==LOCK||LA39_0==MINUS||LA39_0==NOT||LA39_0==OCTAL_LITERAL||(LA39_0 >= PLUS && LA39_0 <= READ_EV)||(LA39_0 >= REMOVE_SEM && LA39_0 <= RES_EV)||LA39_0==SET_EV||LA39_0==STRING_LITERAL||LA39_0==UNLOCK||(LA39_0 >= WAIT_ALL && LA39_0 <= WAIT_EV)||LA39_0==132||LA39_0==134) ) {
                alt39=2;
            }
            else {
                if (state.backtracking>0) {state.failed=true; return retval;}
                NoViableAltException nvae =
                    new NoViableAltException("", 39, 0, input);

                throw nvae;

            }
            switch (alt39) {
                case 1 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:245:4: '(' ( IDENTIFIER | '*' )+ ')' cast_expression
                    {
                    char_literal176=(Token)match(input,130,FOLLOW_130_in_cast_expression1467); if (state.failed) return retval; 
                    if ( state.backtracking==0 ) stream_130.add(char_literal176);


                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:245:8: ( IDENTIFIER | '*' )+
                    int cnt38=0;
                    loop38:
                    do {
                        int alt38=3;
                        int LA38_0 = input.LA(1);

                        if ( (LA38_0==IDENTIFIER) ) {
                            alt38=1;
                        }
                        else if ( (LA38_0==INDIRECTION) ) {
                            alt38=2;
                        }


                        switch (alt38) {
                    	case 1 :
                    	    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:245:9: IDENTIFIER
                    	    {
                    	    IDENTIFIER177=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_cast_expression1470); if (state.failed) return retval; 
                    	    if ( state.backtracking==0 ) stream_IDENTIFIER.add(IDENTIFIER177);


                    	    }
                    	    break;
                    	case 2 :
                    	    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:245:20: '*'
                    	    {
                    	    char_literal178=(Token)match(input,INDIRECTION,FOLLOW_INDIRECTION_in_cast_expression1472); if (state.failed) return retval; 
                    	    if ( state.backtracking==0 ) stream_INDIRECTION.add(char_literal178);


                    	    }
                    	    break;

                    	default :
                    	    if ( cnt38 >= 1 ) break loop38;
                    	    if (state.backtracking>0) {state.failed=true; return retval;}
                                EarlyExitException eee =
                                    new EarlyExitException(38, input);
                                throw eee;
                        }
                        cnt38++;
                    } while (true);


                    char_literal179=(Token)match(input,131,FOLLOW_131_in_cast_expression1476); if (state.failed) return retval; 
                    if ( state.backtracking==0 ) stream_131.add(char_literal179);


                    pushFollow(FOLLOW_cast_expression_in_cast_expression1478);
                    cast_expression180=cast_expression();

                    state._fsp--;
                    if (state.failed) return retval;
                    if ( state.backtracking==0 ) stream_cast_expression.add(cast_expression180.getTree());

                    // AST REWRITE
                    // elements: cast_expression
                    // token labels: 
                    // rule labels: retval
                    // token list labels: 
                    // rule list labels: 
                    // wildcard labels: 
                    if ( state.backtracking==0 ) {

                    retval.tree = root_0;
                    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null);

                    root_0 = (Object)adaptor.nil();
                    // 245:46: -> cast_expression
                    {
                        adaptor.addChild(root_0, stream_cast_expression.nextTree());

                    }


                    retval.tree = root_0;
                    }

                    }
                    break;
                case 2 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:246:4: unary_expression
                    {
                    root_0 = (Object)adaptor.nil();


                    pushFollow(FOLLOW_unary_expression_in_cast_expression1487);
                    unary_expression181=unary_expression();

                    state._fsp--;
                    if (state.failed) return retval;
                    if ( state.backtracking==0 ) adaptor.addChild(root_0, unary_expression181.getTree());

                    }
                    break;

            }
            retval.stop = input.LT(-1);


            if ( state.backtracking==0 ) {

            retval.tree = (Object)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }

        finally {
        	// do for sure before leaving
            if ( state.backtracking>0 ) { memoize(input, 35, cast_expression_StartIndex); }

        }
        return retval;
    }
    // $ANTLR end "cast_expression"


    public static class assignment_operator_return extends ParserRuleReturnScope {
        Object tree;
        public Object getTree() { return tree; }
    };


    // $ANTLR start "assignment_operator"
    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:249:1: assignment_operator : ( ASGN_EQUAL -> ASGN_EQUAL | ASGN_TIMES -> ASGN_TIMES | ASGN_DIVIDE -> ASGN_DIVIDE | ASGN_MOD -> ASGN_MOD | ASGN_PLUS -> ASGN_PLUS | ASGN_MINUS -> ASGN_MINUS | ASGN_LSHIFT -> ASGN_LSHIFT | ASGN_RSHIFT -> ASGN_RSHIFT | ASGN_BITWISE_AND -> ASGN_BITWISE_AND | ASGN_BITWISE_XOR -> ASGN_BITWISE_XOR | ASGN_BITWISE_OR -> ASGN_BITWISE_OR );
    public final SCPARParser.assignment_operator_return assignment_operator() throws RecognitionException {
        SCPARParser.assignment_operator_return retval = new SCPARParser.assignment_operator_return();
        retval.start = input.LT(1);

        int assignment_operator_StartIndex = input.index();

        Object root_0 = null;

        Token ASGN_EQUAL182=null;
        Token ASGN_TIMES183=null;
        Token ASGN_DIVIDE184=null;
        Token ASGN_MOD185=null;
        Token ASGN_PLUS186=null;
        Token ASGN_MINUS187=null;
        Token ASGN_LSHIFT188=null;
        Token ASGN_RSHIFT189=null;
        Token ASGN_BITWISE_AND190=null;
        Token ASGN_BITWISE_XOR191=null;
        Token ASGN_BITWISE_OR192=null;

        Object ASGN_EQUAL182_tree=null;
        Object ASGN_TIMES183_tree=null;
        Object ASGN_DIVIDE184_tree=null;
        Object ASGN_MOD185_tree=null;
        Object ASGN_PLUS186_tree=null;
        Object ASGN_MINUS187_tree=null;
        Object ASGN_LSHIFT188_tree=null;
        Object ASGN_RSHIFT189_tree=null;
        Object ASGN_BITWISE_AND190_tree=null;
        Object ASGN_BITWISE_XOR191_tree=null;
        Object ASGN_BITWISE_OR192_tree=null;
        RewriteRuleTokenStream stream_ASGN_EQUAL=new RewriteRuleTokenStream(adaptor,"token ASGN_EQUAL");
        RewriteRuleTokenStream stream_ASGN_TIMES=new RewriteRuleTokenStream(adaptor,"token ASGN_TIMES");
        RewriteRuleTokenStream stream_ASGN_MOD=new RewriteRuleTokenStream(adaptor,"token ASGN_MOD");
        RewriteRuleTokenStream stream_ASGN_BITWISE_OR=new RewriteRuleTokenStream(adaptor,"token ASGN_BITWISE_OR");
        RewriteRuleTokenStream stream_ASGN_BITWISE_AND=new RewriteRuleTokenStream(adaptor,"token ASGN_BITWISE_AND");
        RewriteRuleTokenStream stream_ASGN_LSHIFT=new RewriteRuleTokenStream(adaptor,"token ASGN_LSHIFT");
        RewriteRuleTokenStream stream_ASGN_BITWISE_XOR=new RewriteRuleTokenStream(adaptor,"token ASGN_BITWISE_XOR");
        RewriteRuleTokenStream stream_ASGN_DIVIDE=new RewriteRuleTokenStream(adaptor,"token ASGN_DIVIDE");
        RewriteRuleTokenStream stream_ASGN_MINUS=new RewriteRuleTokenStream(adaptor,"token ASGN_MINUS");
        RewriteRuleTokenStream stream_ASGN_RSHIFT=new RewriteRuleTokenStream(adaptor,"token ASGN_RSHIFT");
        RewriteRuleTokenStream stream_ASGN_PLUS=new RewriteRuleTokenStream(adaptor,"token ASGN_PLUS");

        try {
            if ( state.backtracking>0 && alreadyParsedRule(input, 36) ) { return retval; }

            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:250:2: ( ASGN_EQUAL -> ASGN_EQUAL | ASGN_TIMES -> ASGN_TIMES | ASGN_DIVIDE -> ASGN_DIVIDE | ASGN_MOD -> ASGN_MOD | ASGN_PLUS -> ASGN_PLUS | ASGN_MINUS -> ASGN_MINUS | ASGN_LSHIFT -> ASGN_LSHIFT | ASGN_RSHIFT -> ASGN_RSHIFT | ASGN_BITWISE_AND -> ASGN_BITWISE_AND | ASGN_BITWISE_XOR -> ASGN_BITWISE_XOR | ASGN_BITWISE_OR -> ASGN_BITWISE_OR )
            int alt40=11;
            switch ( input.LA(1) ) {
            case ASGN_EQUAL:
                {
                alt40=1;
                }
                break;
            case ASGN_TIMES:
                {
                alt40=2;
                }
                break;
            case ASGN_DIVIDE:
                {
                alt40=3;
                }
                break;
            case ASGN_MOD:
                {
                alt40=4;
                }
                break;
            case ASGN_PLUS:
                {
                alt40=5;
                }
                break;
            case ASGN_MINUS:
                {
                alt40=6;
                }
                break;
            case ASGN_LSHIFT:
                {
                alt40=7;
                }
                break;
            case ASGN_RSHIFT:
                {
                alt40=8;
                }
                break;
            case ASGN_BITWISE_AND:
                {
                alt40=9;
                }
                break;
            case ASGN_BITWISE_XOR:
                {
                alt40=10;
                }
                break;
            case ASGN_BITWISE_OR:
                {
                alt40=11;
                }
                break;
            default:
                if (state.backtracking>0) {state.failed=true; return retval;}
                NoViableAltException nvae =
                    new NoViableAltException("", 40, 0, input);

                throw nvae;

            }

            switch (alt40) {
                case 1 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:250:4: ASGN_EQUAL
                    {
                    ASGN_EQUAL182=(Token)match(input,ASGN_EQUAL,FOLLOW_ASGN_EQUAL_in_assignment_operator1498); if (state.failed) return retval; 
                    if ( state.backtracking==0 ) stream_ASGN_EQUAL.add(ASGN_EQUAL182);


                    // AST REWRITE
                    // elements: ASGN_EQUAL
                    // token labels: 
                    // rule labels: retval
                    // token list labels: 
                    // rule list labels: 
                    // wildcard labels: 
                    if ( state.backtracking==0 ) {

                    retval.tree = root_0;
                    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null);

                    root_0 = (Object)adaptor.nil();
                    // 250:15: -> ASGN_EQUAL
                    {
                        adaptor.addChild(root_0, 
                        stream_ASGN_EQUAL.nextNode()
                        );

                    }


                    retval.tree = root_0;
                    }

                    }
                    break;
                case 2 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:251:4: ASGN_TIMES
                    {
                    ASGN_TIMES183=(Token)match(input,ASGN_TIMES,FOLLOW_ASGN_TIMES_in_assignment_operator1507); if (state.failed) return retval; 
                    if ( state.backtracking==0 ) stream_ASGN_TIMES.add(ASGN_TIMES183);


                    // AST REWRITE
                    // elements: ASGN_TIMES
                    // token labels: 
                    // rule labels: retval
                    // token list labels: 
                    // rule list labels: 
                    // wildcard labels: 
                    if ( state.backtracking==0 ) {

                    retval.tree = root_0;
                    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null);

                    root_0 = (Object)adaptor.nil();
                    // 251:15: -> ASGN_TIMES
                    {
                        adaptor.addChild(root_0, 
                        stream_ASGN_TIMES.nextNode()
                        );

                    }


                    retval.tree = root_0;
                    }

                    }
                    break;
                case 3 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:252:4: ASGN_DIVIDE
                    {
                    ASGN_DIVIDE184=(Token)match(input,ASGN_DIVIDE,FOLLOW_ASGN_DIVIDE_in_assignment_operator1516); if (state.failed) return retval; 
                    if ( state.backtracking==0 ) stream_ASGN_DIVIDE.add(ASGN_DIVIDE184);


                    // AST REWRITE
                    // elements: ASGN_DIVIDE
                    // token labels: 
                    // rule labels: retval
                    // token list labels: 
                    // rule list labels: 
                    // wildcard labels: 
                    if ( state.backtracking==0 ) {

                    retval.tree = root_0;
                    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null);

                    root_0 = (Object)adaptor.nil();
                    // 252:16: -> ASGN_DIVIDE
                    {
                        adaptor.addChild(root_0, 
                        stream_ASGN_DIVIDE.nextNode()
                        );

                    }


                    retval.tree = root_0;
                    }

                    }
                    break;
                case 4 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:253:4: ASGN_MOD
                    {
                    ASGN_MOD185=(Token)match(input,ASGN_MOD,FOLLOW_ASGN_MOD_in_assignment_operator1525); if (state.failed) return retval; 
                    if ( state.backtracking==0 ) stream_ASGN_MOD.add(ASGN_MOD185);


                    // AST REWRITE
                    // elements: ASGN_MOD
                    // token labels: 
                    // rule labels: retval
                    // token list labels: 
                    // rule list labels: 
                    // wildcard labels: 
                    if ( state.backtracking==0 ) {

                    retval.tree = root_0;
                    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null);

                    root_0 = (Object)adaptor.nil();
                    // 253:13: -> ASGN_MOD
                    {
                        adaptor.addChild(root_0, 
                        stream_ASGN_MOD.nextNode()
                        );

                    }


                    retval.tree = root_0;
                    }

                    }
                    break;
                case 5 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:254:4: ASGN_PLUS
                    {
                    ASGN_PLUS186=(Token)match(input,ASGN_PLUS,FOLLOW_ASGN_PLUS_in_assignment_operator1534); if (state.failed) return retval; 
                    if ( state.backtracking==0 ) stream_ASGN_PLUS.add(ASGN_PLUS186);


                    // AST REWRITE
                    // elements: ASGN_PLUS
                    // token labels: 
                    // rule labels: retval
                    // token list labels: 
                    // rule list labels: 
                    // wildcard labels: 
                    if ( state.backtracking==0 ) {

                    retval.tree = root_0;
                    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null);

                    root_0 = (Object)adaptor.nil();
                    // 254:14: -> ASGN_PLUS
                    {
                        adaptor.addChild(root_0, 
                        stream_ASGN_PLUS.nextNode()
                        );

                    }


                    retval.tree = root_0;
                    }

                    }
                    break;
                case 6 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:255:4: ASGN_MINUS
                    {
                    ASGN_MINUS187=(Token)match(input,ASGN_MINUS,FOLLOW_ASGN_MINUS_in_assignment_operator1543); if (state.failed) return retval; 
                    if ( state.backtracking==0 ) stream_ASGN_MINUS.add(ASGN_MINUS187);


                    // AST REWRITE
                    // elements: ASGN_MINUS
                    // token labels: 
                    // rule labels: retval
                    // token list labels: 
                    // rule list labels: 
                    // wildcard labels: 
                    if ( state.backtracking==0 ) {

                    retval.tree = root_0;
                    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null);

                    root_0 = (Object)adaptor.nil();
                    // 255:15: -> ASGN_MINUS
                    {
                        adaptor.addChild(root_0, 
                        stream_ASGN_MINUS.nextNode()
                        );

                    }


                    retval.tree = root_0;
                    }

                    }
                    break;
                case 7 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:256:4: ASGN_LSHIFT
                    {
                    ASGN_LSHIFT188=(Token)match(input,ASGN_LSHIFT,FOLLOW_ASGN_LSHIFT_in_assignment_operator1552); if (state.failed) return retval; 
                    if ( state.backtracking==0 ) stream_ASGN_LSHIFT.add(ASGN_LSHIFT188);


                    // AST REWRITE
                    // elements: ASGN_LSHIFT
                    // token labels: 
                    // rule labels: retval
                    // token list labels: 
                    // rule list labels: 
                    // wildcard labels: 
                    if ( state.backtracking==0 ) {

                    retval.tree = root_0;
                    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null);

                    root_0 = (Object)adaptor.nil();
                    // 256:16: -> ASGN_LSHIFT
                    {
                        adaptor.addChild(root_0, 
                        stream_ASGN_LSHIFT.nextNode()
                        );

                    }


                    retval.tree = root_0;
                    }

                    }
                    break;
                case 8 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:257:4: ASGN_RSHIFT
                    {
                    ASGN_RSHIFT189=(Token)match(input,ASGN_RSHIFT,FOLLOW_ASGN_RSHIFT_in_assignment_operator1561); if (state.failed) return retval; 
                    if ( state.backtracking==0 ) stream_ASGN_RSHIFT.add(ASGN_RSHIFT189);


                    // AST REWRITE
                    // elements: ASGN_RSHIFT
                    // token labels: 
                    // rule labels: retval
                    // token list labels: 
                    // rule list labels: 
                    // wildcard labels: 
                    if ( state.backtracking==0 ) {

                    retval.tree = root_0;
                    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null);

                    root_0 = (Object)adaptor.nil();
                    // 257:16: -> ASGN_RSHIFT
                    {
                        adaptor.addChild(root_0, 
                        stream_ASGN_RSHIFT.nextNode()
                        );

                    }


                    retval.tree = root_0;
                    }

                    }
                    break;
                case 9 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:258:4: ASGN_BITWISE_AND
                    {
                    ASGN_BITWISE_AND190=(Token)match(input,ASGN_BITWISE_AND,FOLLOW_ASGN_BITWISE_AND_in_assignment_operator1570); if (state.failed) return retval; 
                    if ( state.backtracking==0 ) stream_ASGN_BITWISE_AND.add(ASGN_BITWISE_AND190);


                    // AST REWRITE
                    // elements: ASGN_BITWISE_AND
                    // token labels: 
                    // rule labels: retval
                    // token list labels: 
                    // rule list labels: 
                    // wildcard labels: 
                    if ( state.backtracking==0 ) {

                    retval.tree = root_0;
                    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null);

                    root_0 = (Object)adaptor.nil();
                    // 258:21: -> ASGN_BITWISE_AND
                    {
                        adaptor.addChild(root_0, 
                        stream_ASGN_BITWISE_AND.nextNode()
                        );

                    }


                    retval.tree = root_0;
                    }

                    }
                    break;
                case 10 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:259:4: ASGN_BITWISE_XOR
                    {
                    ASGN_BITWISE_XOR191=(Token)match(input,ASGN_BITWISE_XOR,FOLLOW_ASGN_BITWISE_XOR_in_assignment_operator1579); if (state.failed) return retval; 
                    if ( state.backtracking==0 ) stream_ASGN_BITWISE_XOR.add(ASGN_BITWISE_XOR191);


                    // AST REWRITE
                    // elements: ASGN_BITWISE_XOR
                    // token labels: 
                    // rule labels: retval
                    // token list labels: 
                    // rule list labels: 
                    // wildcard labels: 
                    if ( state.backtracking==0 ) {

                    retval.tree = root_0;
                    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null);

                    root_0 = (Object)adaptor.nil();
                    // 259:21: -> ASGN_BITWISE_XOR
                    {
                        adaptor.addChild(root_0, 
                        stream_ASGN_BITWISE_XOR.nextNode()
                        );

                    }


                    retval.tree = root_0;
                    }

                    }
                    break;
                case 11 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:260:4: ASGN_BITWISE_OR
                    {
                    ASGN_BITWISE_OR192=(Token)match(input,ASGN_BITWISE_OR,FOLLOW_ASGN_BITWISE_OR_in_assignment_operator1588); if (state.failed) return retval; 
                    if ( state.backtracking==0 ) stream_ASGN_BITWISE_OR.add(ASGN_BITWISE_OR192);


                    // AST REWRITE
                    // elements: ASGN_BITWISE_OR
                    // token labels: 
                    // rule labels: retval
                    // token list labels: 
                    // rule list labels: 
                    // wildcard labels: 
                    if ( state.backtracking==0 ) {

                    retval.tree = root_0;
                    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null);

                    root_0 = (Object)adaptor.nil();
                    // 260:20: -> ASGN_BITWISE_OR
                    {
                        adaptor.addChild(root_0, 
                        stream_ASGN_BITWISE_OR.nextNode()
                        );

                    }


                    retval.tree = root_0;
                    }

                    }
                    break;

            }
            retval.stop = input.LT(-1);


            if ( state.backtracking==0 ) {

            retval.tree = (Object)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }

        finally {
        	// do for sure before leaving
            if ( state.backtracking>0 ) { memoize(input, 36, assignment_operator_StartIndex); }

        }
        return retval;
    }
    // $ANTLR end "assignment_operator"


    public static class lvalue_return extends ParserRuleReturnScope {
        Object tree;
        public Object getTree() { return tree; }
    };


    // $ANTLR start "lvalue"
    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:264:1: lvalue : unary_expression ;
    public final SCPARParser.lvalue_return lvalue() throws RecognitionException {
        SCPARParser.lvalue_return retval = new SCPARParser.lvalue_return();
        retval.start = input.LT(1);

        int lvalue_StartIndex = input.index();

        Object root_0 = null;

        SCPARParser.unary_expression_return unary_expression193 =null;



        try {
            if ( state.backtracking>0 && alreadyParsedRule(input, 37) ) { return retval; }

            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:265:2: ( unary_expression )
            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:265:4: unary_expression
            {
            root_0 = (Object)adaptor.nil();


            pushFollow(FOLLOW_unary_expression_in_lvalue1606);
            unary_expression193=unary_expression();

            state._fsp--;
            if (state.failed) return retval;
            if ( state.backtracking==0 ) adaptor.addChild(root_0, unary_expression193.getTree());

            }

            retval.stop = input.LT(-1);


            if ( state.backtracking==0 ) {

            retval.tree = (Object)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }

        finally {
        	// do for sure before leaving
            if ( state.backtracking>0 ) { memoize(input, 37, lvalue_StartIndex); }

        }
        return retval;
    }
    // $ANTLR end "lvalue"


    public static class constant_expression_return extends ParserRuleReturnScope {
        Object tree;
        public Object getTree() { return tree; }
    };


    // $ANTLR start "constant_expression"
    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:268:1: constant_expression : constant ;
    public final SCPARParser.constant_expression_return constant_expression() throws RecognitionException {
        SCPARParser.constant_expression_return retval = new SCPARParser.constant_expression_return();
        retval.start = input.LT(1);

        int constant_expression_StartIndex = input.index();

        Object root_0 = null;

        SCPARParser.constant_return constant194 =null;



        try {
            if ( state.backtracking>0 && alreadyParsedRule(input, 38) ) { return retval; }

            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:269:2: ( constant )
            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:269:4: constant
            {
            root_0 = (Object)adaptor.nil();


            pushFollow(FOLLOW_constant_in_constant_expression1619);
            constant194=constant();

            state._fsp--;
            if (state.failed) return retval;
            if ( state.backtracking==0 ) adaptor.addChild(root_0, constant194.getTree());

            }

            retval.stop = input.LT(-1);


            if ( state.backtracking==0 ) {

            retval.tree = (Object)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }

        finally {
        	// do for sure before leaving
            if ( state.backtracking>0 ) { memoize(input, 38, constant_expression_StartIndex); }

        }
        return retval;
    }
    // $ANTLR end "constant_expression"


    public static class constant_return extends ParserRuleReturnScope {
        Object tree;
        public Object getTree() { return tree; }
    };


    // $ANTLR start "constant"
    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:272:1: constant : ( HEX_LITERAL -> HEX_LITERAL | OCTAL_LITERAL -> OCTAL_LITERAL | DECIMAL_LITERAL -> DECIMAL_LITERAL | CHARACTER_LITERAL -> CHARACTER_LITERAL | STRING_LITERAL -> STRING_LITERAL | FLOATING_POINT_LITERAL -> FLOATING_POINT_LITERAL );
    public final SCPARParser.constant_return constant() throws RecognitionException {
        SCPARParser.constant_return retval = new SCPARParser.constant_return();
        retval.start = input.LT(1);

        int constant_StartIndex = input.index();

        Object root_0 = null;

        Token HEX_LITERAL195=null;
        Token OCTAL_LITERAL196=null;
        Token DECIMAL_LITERAL197=null;
        Token CHARACTER_LITERAL198=null;
        Token STRING_LITERAL199=null;
        Token FLOATING_POINT_LITERAL200=null;

        Object HEX_LITERAL195_tree=null;
        Object OCTAL_LITERAL196_tree=null;
        Object DECIMAL_LITERAL197_tree=null;
        Object CHARACTER_LITERAL198_tree=null;
        Object STRING_LITERAL199_tree=null;
        Object FLOATING_POINT_LITERAL200_tree=null;
        RewriteRuleTokenStream stream_CHARACTER_LITERAL=new RewriteRuleTokenStream(adaptor,"token CHARACTER_LITERAL");
        RewriteRuleTokenStream stream_OCTAL_LITERAL=new RewriteRuleTokenStream(adaptor,"token OCTAL_LITERAL");
        RewriteRuleTokenStream stream_STRING_LITERAL=new RewriteRuleTokenStream(adaptor,"token STRING_LITERAL");
        RewriteRuleTokenStream stream_HEX_LITERAL=new RewriteRuleTokenStream(adaptor,"token HEX_LITERAL");
        RewriteRuleTokenStream stream_FLOATING_POINT_LITERAL=new RewriteRuleTokenStream(adaptor,"token FLOATING_POINT_LITERAL");
        RewriteRuleTokenStream stream_DECIMAL_LITERAL=new RewriteRuleTokenStream(adaptor,"token DECIMAL_LITERAL");

        try {
            if ( state.backtracking>0 && alreadyParsedRule(input, 39) ) { return retval; }

            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:273:3: ( HEX_LITERAL -> HEX_LITERAL | OCTAL_LITERAL -> OCTAL_LITERAL | DECIMAL_LITERAL -> DECIMAL_LITERAL | CHARACTER_LITERAL -> CHARACTER_LITERAL | STRING_LITERAL -> STRING_LITERAL | FLOATING_POINT_LITERAL -> FLOATING_POINT_LITERAL )
            int alt41=6;
            switch ( input.LA(1) ) {
            case HEX_LITERAL:
                {
                alt41=1;
                }
                break;
            case OCTAL_LITERAL:
                {
                alt41=2;
                }
                break;
            case DECIMAL_LITERAL:
                {
                alt41=3;
                }
                break;
            case CHARACTER_LITERAL:
                {
                alt41=4;
                }
                break;
            case STRING_LITERAL:
                {
                alt41=5;
                }
                break;
            case FLOATING_POINT_LITERAL:
                {
                alt41=6;
                }
                break;
            default:
                if (state.backtracking>0) {state.failed=true; return retval;}
                NoViableAltException nvae =
                    new NoViableAltException("", 41, 0, input);

                throw nvae;

            }

            switch (alt41) {
                case 1 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:273:5: HEX_LITERAL
                    {
                    HEX_LITERAL195=(Token)match(input,HEX_LITERAL,FOLLOW_HEX_LITERAL_in_constant1632); if (state.failed) return retval; 
                    if ( state.backtracking==0 ) stream_HEX_LITERAL.add(HEX_LITERAL195);


                    // AST REWRITE
                    // elements: HEX_LITERAL
                    // token labels: 
                    // rule labels: retval
                    // token list labels: 
                    // rule list labels: 
                    // wildcard labels: 
                    if ( state.backtracking==0 ) {

                    retval.tree = root_0;
                    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null);

                    root_0 = (Object)adaptor.nil();
                    // 273:17: -> HEX_LITERAL
                    {
                        adaptor.addChild(root_0, 
                        stream_HEX_LITERAL.nextNode()
                        );

                    }


                    retval.tree = root_0;
                    }

                    }
                    break;
                case 2 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:274:5: OCTAL_LITERAL
                    {
                    OCTAL_LITERAL196=(Token)match(input,OCTAL_LITERAL,FOLLOW_OCTAL_LITERAL_in_constant1642); if (state.failed) return retval; 
                    if ( state.backtracking==0 ) stream_OCTAL_LITERAL.add(OCTAL_LITERAL196);


                    // AST REWRITE
                    // elements: OCTAL_LITERAL
                    // token labels: 
                    // rule labels: retval
                    // token list labels: 
                    // rule list labels: 
                    // wildcard labels: 
                    if ( state.backtracking==0 ) {

                    retval.tree = root_0;
                    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null);

                    root_0 = (Object)adaptor.nil();
                    // 274:19: -> OCTAL_LITERAL
                    {
                        adaptor.addChild(root_0, 
                        stream_OCTAL_LITERAL.nextNode()
                        );

                    }


                    retval.tree = root_0;
                    }

                    }
                    break;
                case 3 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:275:5: DECIMAL_LITERAL
                    {
                    DECIMAL_LITERAL197=(Token)match(input,DECIMAL_LITERAL,FOLLOW_DECIMAL_LITERAL_in_constant1652); if (state.failed) return retval; 
                    if ( state.backtracking==0 ) stream_DECIMAL_LITERAL.add(DECIMAL_LITERAL197);


                    // AST REWRITE
                    // elements: DECIMAL_LITERAL
                    // token labels: 
                    // rule labels: retval
                    // token list labels: 
                    // rule list labels: 
                    // wildcard labels: 
                    if ( state.backtracking==0 ) {

                    retval.tree = root_0;
                    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null);

                    root_0 = (Object)adaptor.nil();
                    // 275:21: -> DECIMAL_LITERAL
                    {
                        adaptor.addChild(root_0, 
                        stream_DECIMAL_LITERAL.nextNode()
                        );

                    }


                    retval.tree = root_0;
                    }

                    }
                    break;
                case 4 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:276:5: CHARACTER_LITERAL
                    {
                    CHARACTER_LITERAL198=(Token)match(input,CHARACTER_LITERAL,FOLLOW_CHARACTER_LITERAL_in_constant1662); if (state.failed) return retval; 
                    if ( state.backtracking==0 ) stream_CHARACTER_LITERAL.add(CHARACTER_LITERAL198);


                    // AST REWRITE
                    // elements: CHARACTER_LITERAL
                    // token labels: 
                    // rule labels: retval
                    // token list labels: 
                    // rule list labels: 
                    // wildcard labels: 
                    if ( state.backtracking==0 ) {

                    retval.tree = root_0;
                    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null);

                    root_0 = (Object)adaptor.nil();
                    // 276:23: -> CHARACTER_LITERAL
                    {
                        adaptor.addChild(root_0, 
                        stream_CHARACTER_LITERAL.nextNode()
                        );

                    }


                    retval.tree = root_0;
                    }

                    }
                    break;
                case 5 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:277:4: STRING_LITERAL
                    {
                    STRING_LITERAL199=(Token)match(input,STRING_LITERAL,FOLLOW_STRING_LITERAL_in_constant1671); if (state.failed) return retval; 
                    if ( state.backtracking==0 ) stream_STRING_LITERAL.add(STRING_LITERAL199);


                    // AST REWRITE
                    // elements: STRING_LITERAL
                    // token labels: 
                    // rule labels: retval
                    // token list labels: 
                    // rule list labels: 
                    // wildcard labels: 
                    if ( state.backtracking==0 ) {

                    retval.tree = root_0;
                    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null);

                    root_0 = (Object)adaptor.nil();
                    // 277:19: -> STRING_LITERAL
                    {
                        adaptor.addChild(root_0, 
                        stream_STRING_LITERAL.nextNode()
                        );

                    }


                    retval.tree = root_0;
                    }

                    }
                    break;
                case 6 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:278:5: FLOATING_POINT_LITERAL
                    {
                    FLOATING_POINT_LITERAL200=(Token)match(input,FLOATING_POINT_LITERAL,FOLLOW_FLOATING_POINT_LITERAL_in_constant1681); if (state.failed) return retval; 
                    if ( state.backtracking==0 ) stream_FLOATING_POINT_LITERAL.add(FLOATING_POINT_LITERAL200);


                    // AST REWRITE
                    // elements: FLOATING_POINT_LITERAL
                    // token labels: 
                    // rule labels: retval
                    // token list labels: 
                    // rule list labels: 
                    // wildcard labels: 
                    if ( state.backtracking==0 ) {

                    retval.tree = root_0;
                    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null);

                    root_0 = (Object)adaptor.nil();
                    // 278:28: -> FLOATING_POINT_LITERAL
                    {
                        adaptor.addChild(root_0, 
                        stream_FLOATING_POINT_LITERAL.nextNode()
                        );

                    }


                    retval.tree = root_0;
                    }

                    }
                    break;

            }
            retval.stop = input.LT(-1);


            if ( state.backtracking==0 ) {

            retval.tree = (Object)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }

        finally {
        	// do for sure before leaving
            if ( state.backtracking>0 ) { memoize(input, 39, constant_StartIndex); }

        }
        return retval;
    }
    // $ANTLR end "constant"


    public static class primary_expression_return extends ParserRuleReturnScope {
        Object tree;
        public Object getTree() { return tree; }
    };


    // $ANTLR start "primary_expression"
    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:281:1: primary_expression options {k=2; } : ( constant | '(' expression ')' | function_call | IDENTIFIER '.' c_function_call -> ^( IDENTIFIER c_function_call ) | IDENTIFIER -> IDENTIFIER );
    public final SCPARParser.primary_expression_return primary_expression() throws RecognitionException {
        SCPARParser.primary_expression_return retval = new SCPARParser.primary_expression_return();
        retval.start = input.LT(1);

        int primary_expression_StartIndex = input.index();

        Object root_0 = null;

        Token char_literal202=null;
        Token char_literal204=null;
        Token IDENTIFIER206=null;
        Token char_literal207=null;
        Token IDENTIFIER209=null;
        SCPARParser.constant_return constant201 =null;

        SCPARParser.expression_return expression203 =null;

        SCPARParser.function_call_return function_call205 =null;

        SCPARParser.c_function_call_return c_function_call208 =null;


        Object char_literal202_tree=null;
        Object char_literal204_tree=null;
        Object IDENTIFIER206_tree=null;
        Object char_literal207_tree=null;
        Object IDENTIFIER209_tree=null;
        RewriteRuleTokenStream stream_135=new RewriteRuleTokenStream(adaptor,"token 135");
        RewriteRuleTokenStream stream_IDENTIFIER=new RewriteRuleTokenStream(adaptor,"token IDENTIFIER");
        RewriteRuleSubtreeStream stream_c_function_call=new RewriteRuleSubtreeStream(adaptor,"rule c_function_call");
        try {
            if ( state.backtracking>0 && alreadyParsedRule(input, 40) ) { return retval; }

            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:283:2: ( constant | '(' expression ')' | function_call | IDENTIFIER '.' c_function_call -> ^( IDENTIFIER c_function_call ) | IDENTIFIER -> IDENTIFIER )
            int alt42=5;
            alt42 = dfa42.predict(input);
            switch (alt42) {
                case 1 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:283:4: constant
                    {
                    root_0 = (Object)adaptor.nil();


                    pushFollow(FOLLOW_constant_in_primary_expression1711);
                    constant201=constant();

                    state._fsp--;
                    if (state.failed) return retval;
                    if ( state.backtracking==0 ) adaptor.addChild(root_0, constant201.getTree());

                    }
                    break;
                case 2 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:284:4: '(' expression ')'
                    {
                    root_0 = (Object)adaptor.nil();


                    char_literal202=(Token)match(input,130,FOLLOW_130_in_primary_expression1716); if (state.failed) return retval;
                    if ( state.backtracking==0 ) {
                    char_literal202_tree = 
                    (Object)adaptor.create(char_literal202)
                    ;
                    adaptor.addChild(root_0, char_literal202_tree);
                    }

                    pushFollow(FOLLOW_expression_in_primary_expression1718);
                    expression203=expression();

                    state._fsp--;
                    if (state.failed) return retval;
                    if ( state.backtracking==0 ) adaptor.addChild(root_0, expression203.getTree());

                    char_literal204=(Token)match(input,131,FOLLOW_131_in_primary_expression1720); if (state.failed) return retval;
                    if ( state.backtracking==0 ) {
                    char_literal204_tree = 
                    (Object)adaptor.create(char_literal204)
                    ;
                    adaptor.addChild(root_0, char_literal204_tree);
                    }

                    }
                    break;
                case 3 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:285:4: function_call
                    {
                    root_0 = (Object)adaptor.nil();


                    pushFollow(FOLLOW_function_call_in_primary_expression1725);
                    function_call205=function_call();

                    state._fsp--;
                    if (state.failed) return retval;
                    if ( state.backtracking==0 ) adaptor.addChild(root_0, function_call205.getTree());

                    }
                    break;
                case 4 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:286:4: IDENTIFIER '.' c_function_call
                    {
                    IDENTIFIER206=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_primary_expression1730); if (state.failed) return retval; 
                    if ( state.backtracking==0 ) stream_IDENTIFIER.add(IDENTIFIER206);


                    char_literal207=(Token)match(input,135,FOLLOW_135_in_primary_expression1732); if (state.failed) return retval; 
                    if ( state.backtracking==0 ) stream_135.add(char_literal207);


                    pushFollow(FOLLOW_c_function_call_in_primary_expression1734);
                    c_function_call208=c_function_call();

                    state._fsp--;
                    if (state.failed) return retval;
                    if ( state.backtracking==0 ) stream_c_function_call.add(c_function_call208.getTree());

                    // AST REWRITE
                    // elements: c_function_call, IDENTIFIER
                    // token labels: 
                    // rule labels: retval
                    // token list labels: 
                    // rule list labels: 
                    // wildcard labels: 
                    if ( state.backtracking==0 ) {

                    retval.tree = root_0;
                    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null);

                    root_0 = (Object)adaptor.nil();
                    // 286:35: -> ^( IDENTIFIER c_function_call )
                    {
                        // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:286:38: ^( IDENTIFIER c_function_call )
                        {
                        Object root_1 = (Object)adaptor.nil();
                        root_1 = (Object)adaptor.becomeRoot(
                        new MonitorCall(stream_IDENTIFIER.nextToken())
                        , root_1);

                        adaptor.addChild(root_1, stream_c_function_call.nextTree());

                        adaptor.addChild(root_0, root_1);
                        }

                    }


                    retval.tree = root_0;
                    }

                    }
                    break;
                case 5 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:287:4: IDENTIFIER
                    {
                    IDENTIFIER209=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_primary_expression1751); if (state.failed) return retval; 
                    if ( state.backtracking==0 ) stream_IDENTIFIER.add(IDENTIFIER209);


                    // AST REWRITE
                    // elements: IDENTIFIER
                    // token labels: 
                    // rule labels: retval
                    // token list labels: 
                    // rule list labels: 
                    // wildcard labels: 
                    if ( state.backtracking==0 ) {

                    retval.tree = root_0;
                    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null);

                    root_0 = (Object)adaptor.nil();
                    // 287:15: -> IDENTIFIER
                    {
                        adaptor.addChild(root_0, 
                        new VarReference(stream_IDENTIFIER.nextToken())
                        );

                    }


                    retval.tree = root_0;
                    }

                    }
                    break;

            }
            retval.stop = input.LT(-1);


            if ( state.backtracking==0 ) {

            retval.tree = (Object)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }

        finally {
        	// do for sure before leaving
            if ( state.backtracking>0 ) { memoize(input, 40, primary_expression_StartIndex); }

        }
        return retval;
    }
    // $ANTLR end "primary_expression"


    public static class unary_expression_return extends ParserRuleReturnScope {
        Object tree;
        public Object getTree() { return tree; }
    };


    // $ANTLR start "unary_expression"
    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:291:1: unary_expression : ( ( '++' | '--' ) unary_expression | unary_operator cast_expression | primary_expression ( postfix_expression )* );
    public final SCPARParser.unary_expression_return unary_expression() throws RecognitionException {
        SCPARParser.unary_expression_return retval = new SCPARParser.unary_expression_return();
        retval.start = input.LT(1);

        int unary_expression_StartIndex = input.index();

        Object root_0 = null;

        Token set210=null;
        SCPARParser.unary_expression_return unary_expression211 =null;

        SCPARParser.unary_operator_return unary_operator212 =null;

        SCPARParser.cast_expression_return cast_expression213 =null;

        SCPARParser.primary_expression_return primary_expression214 =null;

        SCPARParser.postfix_expression_return postfix_expression215 =null;


        Object set210_tree=null;

        try {
            if ( state.backtracking>0 && alreadyParsedRule(input, 41) ) { return retval; }

            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:292:2: ( ( '++' | '--' ) unary_expression | unary_operator cast_expression | primary_expression ( postfix_expression )* )
            int alt44=3;
            switch ( input.LA(1) ) {
            case 132:
            case 134:
                {
                alt44=1;
                }
                break;
            case ADDRESSOF:
            case BITWISE_NOT:
            case INDIRECTION:
            case MINUS:
            case NOT:
            case PLUS:
                {
                alt44=2;
                }
                break;
            case ALLOC_PROC:
            case CHARACTER_LITERAL:
            case CREATE:
            case CREATE_EV:
            case CREATE_SEM:
            case DECIMAL_LITERAL:
            case FLOATING_POINT_LITERAL:
            case HEX_LITERAL:
            case IDENTIFIER:
            case LOCK:
            case OCTAL_LITERAL:
            case READ_EV:
            case REMOVE_SEM:
            case REM_EV:
            case RES_EV:
            case SET_EV:
            case STRING_LITERAL:
            case UNLOCK:
            case WAIT_ALL:
            case WAIT_EV:
            case 130:
                {
                alt44=3;
                }
                break;
            default:
                if (state.backtracking>0) {state.failed=true; return retval;}
                NoViableAltException nvae =
                    new NoViableAltException("", 44, 0, input);

                throw nvae;

            }

            switch (alt44) {
                case 1 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:292:4: ( '++' | '--' ) unary_expression
                    {
                    root_0 = (Object)adaptor.nil();


                    set210=(Token)input.LT(1);

                    if ( input.LA(1)==132||input.LA(1)==134 ) {
                        input.consume();
                        if ( state.backtracking==0 ) adaptor.addChild(root_0, 
                        (Object)adaptor.create(set210)
                        );
                        state.errorRecovery=false;
                        state.failed=false;
                    }
                    else {
                        if (state.backtracking>0) {state.failed=true; return retval;}
                        MismatchedSetException mse = new MismatchedSetException(null,input);
                        throw mse;
                    }


                    pushFollow(FOLLOW_unary_expression_in_unary_expression1777);
                    unary_expression211=unary_expression();

                    state._fsp--;
                    if (state.failed) return retval;
                    if ( state.backtracking==0 ) adaptor.addChild(root_0, unary_expression211.getTree());

                    }
                    break;
                case 2 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:293:4: unary_operator cast_expression
                    {
                    root_0 = (Object)adaptor.nil();


                    pushFollow(FOLLOW_unary_operator_in_unary_expression1782);
                    unary_operator212=unary_operator();

                    state._fsp--;
                    if (state.failed) return retval;
                    if ( state.backtracking==0 ) adaptor.addChild(root_0, unary_operator212.getTree());

                    pushFollow(FOLLOW_cast_expression_in_unary_expression1784);
                    cast_expression213=cast_expression();

                    state._fsp--;
                    if (state.failed) return retval;
                    if ( state.backtracking==0 ) adaptor.addChild(root_0, cast_expression213.getTree());

                    }
                    break;
                case 3 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:294:4: primary_expression ( postfix_expression )*
                    {
                    root_0 = (Object)adaptor.nil();


                    pushFollow(FOLLOW_primary_expression_in_unary_expression1789);
                    primary_expression214=primary_expression();

                    state._fsp--;
                    if (state.failed) return retval;
                    if ( state.backtracking==0 ) adaptor.addChild(root_0, primary_expression214.getTree());

                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:294:23: ( postfix_expression )*
                    loop43:
                    do {
                        int alt43=2;
                        alt43 = dfa43.predict(input);
                        switch (alt43) {
                    	case 1 :
                    	    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:294:23: postfix_expression
                    	    {
                    	    pushFollow(FOLLOW_postfix_expression_in_unary_expression1791);
                    	    postfix_expression215=postfix_expression();

                    	    state._fsp--;
                    	    if (state.failed) return retval;
                    	    if ( state.backtracking==0 ) adaptor.addChild(root_0, postfix_expression215.getTree());

                    	    }
                    	    break;

                    	default :
                    	    break loop43;
                        }
                    } while (true);


                    }
                    break;

            }
            retval.stop = input.LT(-1);


            if ( state.backtracking==0 ) {

            retval.tree = (Object)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }

        finally {
        	// do for sure before leaving
            if ( state.backtracking>0 ) { memoize(input, 41, unary_expression_StartIndex); }

        }
        return retval;
    }
    // $ANTLR end "unary_expression"


    public static class postfix_expression_return extends ParserRuleReturnScope {
        Object tree;
        public Object getTree() { return tree; }
    };


    // $ANTLR start "postfix_expression"
    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:297:1: postfix_expression : ( '[' expression ']' | '++' | '--' );
    public final SCPARParser.postfix_expression_return postfix_expression() throws RecognitionException {
        SCPARParser.postfix_expression_return retval = new SCPARParser.postfix_expression_return();
        retval.start = input.LT(1);

        int postfix_expression_StartIndex = input.index();

        Object root_0 = null;

        Token char_literal216=null;
        Token char_literal218=null;
        Token string_literal219=null;
        Token string_literal220=null;
        SCPARParser.expression_return expression217 =null;


        Object char_literal216_tree=null;
        Object char_literal218_tree=null;
        Object string_literal219_tree=null;
        Object string_literal220_tree=null;

        try {
            if ( state.backtracking>0 && alreadyParsedRule(input, 42) ) { return retval; }

            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:298:2: ( '[' expression ']' | '++' | '--' )
            int alt45=3;
            switch ( input.LA(1) ) {
            case 140:
                {
                alt45=1;
                }
                break;
            case 132:
                {
                alt45=2;
                }
                break;
            case 134:
                {
                alt45=3;
                }
                break;
            default:
                if (state.backtracking>0) {state.failed=true; return retval;}
                NoViableAltException nvae =
                    new NoViableAltException("", 45, 0, input);

                throw nvae;

            }

            switch (alt45) {
                case 1 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:298:4: '[' expression ']'
                    {
                    root_0 = (Object)adaptor.nil();


                    char_literal216=(Token)match(input,140,FOLLOW_140_in_postfix_expression1804); if (state.failed) return retval;
                    if ( state.backtracking==0 ) {
                    char_literal216_tree = 
                    (Object)adaptor.create(char_literal216)
                    ;
                    adaptor.addChild(root_0, char_literal216_tree);
                    }

                    pushFollow(FOLLOW_expression_in_postfix_expression1806);
                    expression217=expression();

                    state._fsp--;
                    if (state.failed) return retval;
                    if ( state.backtracking==0 ) adaptor.addChild(root_0, expression217.getTree());

                    char_literal218=(Token)match(input,141,FOLLOW_141_in_postfix_expression1808); if (state.failed) return retval;
                    if ( state.backtracking==0 ) {
                    char_literal218_tree = 
                    (Object)adaptor.create(char_literal218)
                    ;
                    adaptor.addChild(root_0, char_literal218_tree);
                    }

                    }
                    break;
                case 2 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:299:4: '++'
                    {
                    root_0 = (Object)adaptor.nil();


                    string_literal219=(Token)match(input,132,FOLLOW_132_in_postfix_expression1813); if (state.failed) return retval;
                    if ( state.backtracking==0 ) {
                    string_literal219_tree = 
                    (Object)adaptor.create(string_literal219)
                    ;
                    adaptor.addChild(root_0, string_literal219_tree);
                    }

                    }
                    break;
                case 3 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:300:4: '--'
                    {
                    root_0 = (Object)adaptor.nil();


                    string_literal220=(Token)match(input,134,FOLLOW_134_in_postfix_expression1818); if (state.failed) return retval;
                    if ( state.backtracking==0 ) {
                    string_literal220_tree = 
                    (Object)adaptor.create(string_literal220)
                    ;
                    adaptor.addChild(root_0, string_literal220_tree);
                    }

                    }
                    break;

            }
            retval.stop = input.LT(-1);


            if ( state.backtracking==0 ) {

            retval.tree = (Object)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }

        finally {
        	// do for sure before leaving
            if ( state.backtracking>0 ) { memoize(input, 42, postfix_expression_StartIndex); }

        }
        return retval;
    }
    // $ANTLR end "postfix_expression"


    public static class unary_operator_return extends ParserRuleReturnScope {
        Object tree;
        public Object getTree() { return tree; }
    };


    // $ANTLR start "unary_operator"
    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:303:1: unary_operator : ( ADDRESSOF | INDIRECTION | PLUS | MINUS | BITWISE_NOT | NOT );
    public final SCPARParser.unary_operator_return unary_operator() throws RecognitionException {
        SCPARParser.unary_operator_return retval = new SCPARParser.unary_operator_return();
        retval.start = input.LT(1);

        int unary_operator_StartIndex = input.index();

        Object root_0 = null;

        Token set221=null;

        Object set221_tree=null;

        try {
            if ( state.backtracking>0 && alreadyParsedRule(input, 43) ) { return retval; }

            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:304:2: ( ADDRESSOF | INDIRECTION | PLUS | MINUS | BITWISE_NOT | NOT )
            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:
            {
            root_0 = (Object)adaptor.nil();


            set221=(Token)input.LT(1);

            if ( input.LA(1)==ADDRESSOF||input.LA(1)==BITWISE_NOT||input.LA(1)==INDIRECTION||input.LA(1)==MINUS||input.LA(1)==NOT||input.LA(1)==PLUS ) {
                input.consume();
                if ( state.backtracking==0 ) adaptor.addChild(root_0, 
                (Object)adaptor.create(set221)
                );
                state.errorRecovery=false;
                state.failed=false;
            }
            else {
                if (state.backtracking>0) {state.failed=true; return retval;}
                MismatchedSetException mse = new MismatchedSetException(null,input);
                throw mse;
            }


            }

            retval.stop = input.LT(-1);


            if ( state.backtracking==0 ) {

            retval.tree = (Object)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }

        finally {
        	// do for sure before leaving
            if ( state.backtracking>0 ) { memoize(input, 43, unary_operator_StartIndex); }

        }
        return retval;
    }
    // $ANTLR end "unary_operator"


    public static class declaration_sufix_return extends ParserRuleReturnScope {
        Object tree;
        public Object getTree() { return tree; }
    };


    // $ANTLR start "declaration_sufix"
    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:312:1: declaration_sufix : '[' constant ']' -> ^( VECTOR constant ) ;
    public final SCPARParser.declaration_sufix_return declaration_sufix() throws RecognitionException {
        SCPARParser.declaration_sufix_return retval = new SCPARParser.declaration_sufix_return();
        retval.start = input.LT(1);

        int declaration_sufix_StartIndex = input.index();

        Object root_0 = null;

        Token char_literal222=null;
        Token char_literal224=null;
        SCPARParser.constant_return constant223 =null;


        Object char_literal222_tree=null;
        Object char_literal224_tree=null;
        RewriteRuleTokenStream stream_140=new RewriteRuleTokenStream(adaptor,"token 140");
        RewriteRuleTokenStream stream_141=new RewriteRuleTokenStream(adaptor,"token 141");
        RewriteRuleSubtreeStream stream_constant=new RewriteRuleSubtreeStream(adaptor,"rule constant");
        try {
            if ( state.backtracking>0 && alreadyParsedRule(input, 44) ) { return retval; }

            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:313:2: ( '[' constant ']' -> ^( VECTOR constant ) )
            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:313:4: '[' constant ']'
            {
            char_literal222=(Token)match(input,140,FOLLOW_140_in_declaration_sufix1867); if (state.failed) return retval; 
            if ( state.backtracking==0 ) stream_140.add(char_literal222);


            pushFollow(FOLLOW_constant_in_declaration_sufix1869);
            constant223=constant();

            state._fsp--;
            if (state.failed) return retval;
            if ( state.backtracking==0 ) stream_constant.add(constant223.getTree());

            char_literal224=(Token)match(input,141,FOLLOW_141_in_declaration_sufix1871); if (state.failed) return retval; 
            if ( state.backtracking==0 ) stream_141.add(char_literal224);


            // AST REWRITE
            // elements: constant
            // token labels: 
            // rule labels: retval
            // token list labels: 
            // rule list labels: 
            // wildcard labels: 
            if ( state.backtracking==0 ) {

            retval.tree = root_0;
            RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null);

            root_0 = (Object)adaptor.nil();
            // 313:21: -> ^( VECTOR constant )
            {
                // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:313:24: ^( VECTOR constant )
                {
                Object root_1 = (Object)adaptor.nil();
                root_1 = (Object)adaptor.becomeRoot(
                (Object)adaptor.create(VECTOR, "VECTOR")
                , root_1);

                adaptor.addChild(root_1, stream_constant.nextTree());

                adaptor.addChild(root_0, root_1);
                }

            }


            retval.tree = root_0;
            }

            }

            retval.stop = input.LT(-1);


            if ( state.backtracking==0 ) {

            retval.tree = (Object)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }

        finally {
        	// do for sure before leaving
            if ( state.backtracking>0 ) { memoize(input, 44, declaration_sufix_StartIndex); }

        }
        return retval;
    }
    // $ANTLR end "declaration_sufix"


    public static class var_declaration_return extends ParserRuleReturnScope {
        Object tree;
        public Object getTree() { return tree; }
    };


    // $ANTLR start "var_declaration"
    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:316:1: var_declaration : ( c_var_declaration ( declaration_sufix )* ';' -> ^( VARDEF ^( SHARED c_var_declaration ( declaration_sufix )* ) ) | shared_var_declaration ';' -> ^( VARDEF shared_var_declaration ';' ) );
    public final SCPARParser.var_declaration_return var_declaration() throws RecognitionException {
        SCPARParser.var_declaration_return retval = new SCPARParser.var_declaration_return();
        retval.start = input.LT(1);

        int var_declaration_StartIndex = input.index();

        Object root_0 = null;

        Token char_literal227=null;
        Token char_literal229=null;
        SCPARParser.c_var_declaration_return c_var_declaration225 =null;

        SCPARParser.declaration_sufix_return declaration_sufix226 =null;

        SCPARParser.shared_var_declaration_return shared_var_declaration228 =null;


        Object char_literal227_tree=null;
        Object char_literal229_tree=null;
        RewriteRuleTokenStream stream_138=new RewriteRuleTokenStream(adaptor,"token 138");
        RewriteRuleSubtreeStream stream_shared_var_declaration=new RewriteRuleSubtreeStream(adaptor,"rule shared_var_declaration");
        RewriteRuleSubtreeStream stream_c_var_declaration=new RewriteRuleSubtreeStream(adaptor,"rule c_var_declaration");
        RewriteRuleSubtreeStream stream_declaration_sufix=new RewriteRuleSubtreeStream(adaptor,"rule declaration_sufix");
        try {
            if ( state.backtracking>0 && alreadyParsedRule(input, 45) ) { return retval; }

            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:317:2: ( c_var_declaration ( declaration_sufix )* ';' -> ^( VARDEF ^( SHARED c_var_declaration ( declaration_sufix )* ) ) | shared_var_declaration ';' -> ^( VARDEF shared_var_declaration ';' ) )
            int alt47=2;
            int LA47_0 = input.LA(1);

            if ( (LA47_0==AUTO||(LA47_0 >= CDECL && LA47_0 <= CHAR)||LA47_0==CONST||LA47_0==DOUBLE||(LA47_0 >= EVENT && LA47_0 <= EXTERN)||LA47_0==FLOAT||LA47_0==IDENTIFIER||(LA47_0 >= INT && LA47_0 <= INT64)||LA47_0==LONG||LA47_0==REGISTER||LA47_0==SEMAPH||(LA47_0 >= SHORT && LA47_0 <= SIGNED)||LA47_0==STATIC||LA47_0==STRUCT||LA47_0==UNION||LA47_0==UNSIGNED||(LA47_0 >= VOID && LA47_0 <= W64)) ) {
                alt47=1;
            }
            else if ( (LA47_0==SHARED) ) {
                alt47=2;
            }
            else {
                if (state.backtracking>0) {state.failed=true; return retval;}
                NoViableAltException nvae =
                    new NoViableAltException("", 47, 0, input);

                throw nvae;

            }
            switch (alt47) {
                case 1 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:317:4: c_var_declaration ( declaration_sufix )* ';'
                    {
                    pushFollow(FOLLOW_c_var_declaration_in_var_declaration1891);
                    c_var_declaration225=c_var_declaration();

                    state._fsp--;
                    if (state.failed) return retval;
                    if ( state.backtracking==0 ) stream_c_var_declaration.add(c_var_declaration225.getTree());

                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:317:22: ( declaration_sufix )*
                    loop46:
                    do {
                        int alt46=2;
                        int LA46_0 = input.LA(1);

                        if ( (LA46_0==140) ) {
                            alt46=1;
                        }


                        switch (alt46) {
                    	case 1 :
                    	    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:317:22: declaration_sufix
                    	    {
                    	    pushFollow(FOLLOW_declaration_sufix_in_var_declaration1893);
                    	    declaration_sufix226=declaration_sufix();

                    	    state._fsp--;
                    	    if (state.failed) return retval;
                    	    if ( state.backtracking==0 ) stream_declaration_sufix.add(declaration_sufix226.getTree());

                    	    }
                    	    break;

                    	default :
                    	    break loop46;
                        }
                    } while (true);


                    char_literal227=(Token)match(input,138,FOLLOW_138_in_var_declaration1896); if (state.failed) return retval; 
                    if ( state.backtracking==0 ) stream_138.add(char_literal227);


                    // AST REWRITE
                    // elements: c_var_declaration, declaration_sufix
                    // token labels: 
                    // rule labels: retval
                    // token list labels: 
                    // rule list labels: 
                    // wildcard labels: 
                    if ( state.backtracking==0 ) {

                    retval.tree = root_0;
                    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null);

                    root_0 = (Object)adaptor.nil();
                    // 317:45: -> ^( VARDEF ^( SHARED c_var_declaration ( declaration_sufix )* ) )
                    {
                        // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:317:48: ^( VARDEF ^( SHARED c_var_declaration ( declaration_sufix )* ) )
                        {
                        Object root_1 = (Object)adaptor.nil();
                        root_1 = (Object)adaptor.becomeRoot(
                        (Object)adaptor.create(VARDEF, "VARDEF")
                        , root_1);

                        // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:317:57: ^( SHARED c_var_declaration ( declaration_sufix )* )
                        {
                        Object root_2 = (Object)adaptor.nil();
                        root_2 = (Object)adaptor.becomeRoot(
                        new SharedObject(SHARED)
                        , root_2);

                        adaptor.addChild(root_2, stream_c_var_declaration.nextTree());

                        // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:317:98: ( declaration_sufix )*
                        while ( stream_declaration_sufix.hasNext() ) {
                            adaptor.addChild(root_2, stream_declaration_sufix.nextTree());

                        }
                        stream_declaration_sufix.reset();

                        adaptor.addChild(root_1, root_2);
                        }

                        adaptor.addChild(root_0, root_1);
                        }

                    }


                    retval.tree = root_0;
                    }

                    }
                    break;
                case 2 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:318:4: shared_var_declaration ';'
                    {
                    pushFollow(FOLLOW_shared_var_declaration_in_var_declaration1919);
                    shared_var_declaration228=shared_var_declaration();

                    state._fsp--;
                    if (state.failed) return retval;
                    if ( state.backtracking==0 ) stream_shared_var_declaration.add(shared_var_declaration228.getTree());

                    char_literal229=(Token)match(input,138,FOLLOW_138_in_var_declaration1921); if (state.failed) return retval; 
                    if ( state.backtracking==0 ) stream_138.add(char_literal229);


                    // AST REWRITE
                    // elements: shared_var_declaration, 138
                    // token labels: 
                    // rule labels: retval
                    // token list labels: 
                    // rule list labels: 
                    // wildcard labels: 
                    if ( state.backtracking==0 ) {

                    retval.tree = root_0;
                    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null);

                    root_0 = (Object)adaptor.nil();
                    // 318:31: -> ^( VARDEF shared_var_declaration ';' )
                    {
                        // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:318:34: ^( VARDEF shared_var_declaration ';' )
                        {
                        Object root_1 = (Object)adaptor.nil();
                        root_1 = (Object)adaptor.becomeRoot(
                        (Object)adaptor.create(VARDEF, "VARDEF")
                        , root_1);

                        adaptor.addChild(root_1, stream_shared_var_declaration.nextTree());

                        adaptor.addChild(root_1, 
                        stream_138.nextNode()
                        );

                        adaptor.addChild(root_0, root_1);
                        }

                    }


                    retval.tree = root_0;
                    }

                    }
                    break;

            }
            retval.stop = input.LT(-1);


            if ( state.backtracking==0 ) {

            retval.tree = (Object)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }

        finally {
        	// do for sure before leaving
            if ( state.backtracking>0 ) { memoize(input, 45, var_declaration_StartIndex); }

        }
        return retval;
    }
    // $ANTLR end "var_declaration"


    public static class c_var_declaration_return extends ParserRuleReturnScope {
        Object tree;
        public Object getTree() { return tree; }
    };


    // $ANTLR start "c_var_declaration"
    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:322:1: c_var_declaration : type_declaration var_names ;
    public final SCPARParser.c_var_declaration_return c_var_declaration() throws RecognitionException {
        SCPARParser.c_var_declaration_return retval = new SCPARParser.c_var_declaration_return();
        retval.start = input.LT(1);

        int c_var_declaration_StartIndex = input.index();

        Object root_0 = null;

        SCPARParser.type_declaration_return type_declaration230 =null;

        SCPARParser.var_names_return var_names231 =null;



        try {
            if ( state.backtracking>0 && alreadyParsedRule(input, 46) ) { return retval; }

            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:323:2: ( type_declaration var_names )
            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:323:4: type_declaration var_names
            {
            root_0 = (Object)adaptor.nil();


            pushFollow(FOLLOW_type_declaration_in_c_var_declaration1945);
            type_declaration230=type_declaration();

            state._fsp--;
            if (state.failed) return retval;
            if ( state.backtracking==0 ) adaptor.addChild(root_0, type_declaration230.getTree());

            pushFollow(FOLLOW_var_names_in_c_var_declaration1947);
            var_names231=var_names();

            state._fsp--;
            if (state.failed) return retval;
            if ( state.backtracking==0 ) adaptor.addChild(root_0, var_names231.getTree());

            }

            retval.stop = input.LT(-1);


            if ( state.backtracking==0 ) {

            retval.tree = (Object)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }

        finally {
        	// do for sure before leaving
            if ( state.backtracking>0 ) { memoize(input, 46, c_var_declaration_StartIndex); }

        }
        return retval;
    }
    // $ANTLR end "c_var_declaration"


    public static class shared_var_declaration_return extends ParserRuleReturnScope {
        Object tree;
        public Object getTree() { return tree; }
    };


    // $ANTLR start "shared_var_declaration"
    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:326:1: shared_var_declaration : SHARED type_declaration var_names ( declaration_sufix )* -> ^( SHARED type_declaration var_names ) ;
    public final SCPARParser.shared_var_declaration_return shared_var_declaration() throws RecognitionException {
        SCPARParser.shared_var_declaration_return retval = new SCPARParser.shared_var_declaration_return();
        retval.start = input.LT(1);

        int shared_var_declaration_StartIndex = input.index();

        Object root_0 = null;

        Token SHARED232=null;
        SCPARParser.type_declaration_return type_declaration233 =null;

        SCPARParser.var_names_return var_names234 =null;

        SCPARParser.declaration_sufix_return declaration_sufix235 =null;


        Object SHARED232_tree=null;
        RewriteRuleTokenStream stream_SHARED=new RewriteRuleTokenStream(adaptor,"token SHARED");
        RewriteRuleSubtreeStream stream_type_declaration=new RewriteRuleSubtreeStream(adaptor,"rule type_declaration");
        RewriteRuleSubtreeStream stream_declaration_sufix=new RewriteRuleSubtreeStream(adaptor,"rule declaration_sufix");
        RewriteRuleSubtreeStream stream_var_names=new RewriteRuleSubtreeStream(adaptor,"rule var_names");
        try {
            if ( state.backtracking>0 && alreadyParsedRule(input, 47) ) { return retval; }

            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:327:2: ( SHARED type_declaration var_names ( declaration_sufix )* -> ^( SHARED type_declaration var_names ) )
            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:327:4: SHARED type_declaration var_names ( declaration_sufix )*
            {
            SHARED232=(Token)match(input,SHARED,FOLLOW_SHARED_in_shared_var_declaration1959); if (state.failed) return retval; 
            if ( state.backtracking==0 ) stream_SHARED.add(SHARED232);


            pushFollow(FOLLOW_type_declaration_in_shared_var_declaration1961);
            type_declaration233=type_declaration();

            state._fsp--;
            if (state.failed) return retval;
            if ( state.backtracking==0 ) stream_type_declaration.add(type_declaration233.getTree());

            pushFollow(FOLLOW_var_names_in_shared_var_declaration1963);
            var_names234=var_names();

            state._fsp--;
            if (state.failed) return retval;
            if ( state.backtracking==0 ) stream_var_names.add(var_names234.getTree());

            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:327:38: ( declaration_sufix )*
            loop48:
            do {
                int alt48=2;
                int LA48_0 = input.LA(1);

                if ( (LA48_0==140) ) {
                    alt48=1;
                }


                switch (alt48) {
            	case 1 :
            	    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:327:38: declaration_sufix
            	    {
            	    pushFollow(FOLLOW_declaration_sufix_in_shared_var_declaration1965);
            	    declaration_sufix235=declaration_sufix();

            	    state._fsp--;
            	    if (state.failed) return retval;
            	    if ( state.backtracking==0 ) stream_declaration_sufix.add(declaration_sufix235.getTree());

            	    }
            	    break;

            	default :
            	    break loop48;
                }
            } while (true);


            // AST REWRITE
            // elements: type_declaration, SHARED, var_names
            // token labels: 
            // rule labels: retval
            // token list labels: 
            // rule list labels: 
            // wildcard labels: 
            if ( state.backtracking==0 ) {

            retval.tree = root_0;
            RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null);

            root_0 = (Object)adaptor.nil();
            // 327:57: -> ^( SHARED type_declaration var_names )
            {
                // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:327:60: ^( SHARED type_declaration var_names )
                {
                Object root_1 = (Object)adaptor.nil();
                root_1 = (Object)adaptor.becomeRoot(
                new SharedObject(stream_SHARED.nextToken())
                , root_1);

                adaptor.addChild(root_1, stream_type_declaration.nextTree());

                adaptor.addChild(root_1, stream_var_names.nextTree());

                adaptor.addChild(root_0, root_1);
                }

            }


            retval.tree = root_0;
            }

            }

            retval.stop = input.LT(-1);


            if ( state.backtracking==0 ) {

            retval.tree = (Object)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }

        finally {
        	// do for sure before leaving
            if ( state.backtracking>0 ) { memoize(input, 47, shared_var_declaration_StartIndex); }

        }
        return retval;
    }
    // $ANTLR end "shared_var_declaration"


    public static class var_names_return extends ParserRuleReturnScope {
        Object tree;
        public Object getTree() { return tree; }
    };


    // $ANTLR start "var_names"
    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:330:1: var_names : IDENTIFIER ( ',' IDENTIFIER )* -> ^( NAMES ( IDENTIFIER )+ ) ;
    public final SCPARParser.var_names_return var_names() throws RecognitionException {
        SCPARParser.var_names_return retval = new SCPARParser.var_names_return();
        retval.start = input.LT(1);

        int var_names_StartIndex = input.index();

        Object root_0 = null;

        Token IDENTIFIER236=null;
        Token char_literal237=null;
        Token IDENTIFIER238=null;

        Object IDENTIFIER236_tree=null;
        Object char_literal237_tree=null;
        Object IDENTIFIER238_tree=null;
        RewriteRuleTokenStream stream_133=new RewriteRuleTokenStream(adaptor,"token 133");
        RewriteRuleTokenStream stream_IDENTIFIER=new RewriteRuleTokenStream(adaptor,"token IDENTIFIER");

        try {
            if ( state.backtracking>0 && alreadyParsedRule(input, 48) ) { return retval; }

            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:331:2: ( IDENTIFIER ( ',' IDENTIFIER )* -> ^( NAMES ( IDENTIFIER )+ ) )
            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:331:4: IDENTIFIER ( ',' IDENTIFIER )*
            {
            IDENTIFIER236=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_var_names1991); if (state.failed) return retval; 
            if ( state.backtracking==0 ) stream_IDENTIFIER.add(IDENTIFIER236);


            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:331:15: ( ',' IDENTIFIER )*
            loop49:
            do {
                int alt49=2;
                int LA49_0 = input.LA(1);

                if ( (LA49_0==133) ) {
                    int LA49_1 = input.LA(2);

                    if ( (LA49_1==IDENTIFIER) ) {
                        int LA49_3 = input.LA(3);

                        if ( (LA49_3==EOF||LA49_3==131||LA49_3==133||LA49_3==138||LA49_3==140) ) {
                            alt49=1;
                        }


                    }


                }


                switch (alt49) {
            	case 1 :
            	    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:331:16: ',' IDENTIFIER
            	    {
            	    char_literal237=(Token)match(input,133,FOLLOW_133_in_var_names1994); if (state.failed) return retval; 
            	    if ( state.backtracking==0 ) stream_133.add(char_literal237);


            	    IDENTIFIER238=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_var_names1996); if (state.failed) return retval; 
            	    if ( state.backtracking==0 ) stream_IDENTIFIER.add(IDENTIFIER238);


            	    }
            	    break;

            	default :
            	    break loop49;
                }
            } while (true);


            // AST REWRITE
            // elements: IDENTIFIER
            // token labels: 
            // rule labels: retval
            // token list labels: 
            // rule list labels: 
            // wildcard labels: 
            if ( state.backtracking==0 ) {

            retval.tree = root_0;
            RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null);

            root_0 = (Object)adaptor.nil();
            // 331:33: -> ^( NAMES ( IDENTIFIER )+ )
            {
                // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:331:36: ^( NAMES ( IDENTIFIER )+ )
                {
                Object root_1 = (Object)adaptor.nil();
                root_1 = (Object)adaptor.becomeRoot(
                (Object)adaptor.create(NAMES, "NAMES")
                , root_1);

                if ( !(stream_IDENTIFIER.hasNext()) ) {
                    throw new RewriteEarlyExitException();
                }
                while ( stream_IDENTIFIER.hasNext() ) {
                    adaptor.addChild(root_1, 
                    stream_IDENTIFIER.nextNode()
                    );

                }
                stream_IDENTIFIER.reset();

                adaptor.addChild(root_0, root_1);
                }

            }


            retval.tree = root_0;
            }

            }

            retval.stop = input.LT(-1);


            if ( state.backtracking==0 ) {

            retval.tree = (Object)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }

        finally {
        	// do for sure before leaving
            if ( state.backtracking>0 ) { memoize(input, 48, var_names_StartIndex); }

        }
        return retval;
    }
    // $ANTLR end "var_names"


    public static class type_declaration_return extends ParserRuleReturnScope {
        Object tree;
        public Object getTree() { return tree; }
    };


    // $ANTLR start "type_declaration"
    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:334:1: type_declaration : ( ( type )+ ( '*' )* -> ^( TYPES ( type )+ ( '*' )* ) | struct_declaration );
    public final SCPARParser.type_declaration_return type_declaration() throws RecognitionException {
        SCPARParser.type_declaration_return retval = new SCPARParser.type_declaration_return();
        retval.start = input.LT(1);

        int type_declaration_StartIndex = input.index();

        Object root_0 = null;

        Token char_literal240=null;
        SCPARParser.type_return type239 =null;

        SCPARParser.struct_declaration_return struct_declaration241 =null;


        Object char_literal240_tree=null;
        RewriteRuleTokenStream stream_INDIRECTION=new RewriteRuleTokenStream(adaptor,"token INDIRECTION");
        RewriteRuleSubtreeStream stream_type=new RewriteRuleSubtreeStream(adaptor,"rule type");
        try {
            if ( state.backtracking>0 && alreadyParsedRule(input, 49) ) { return retval; }

            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:335:2: ( ( type )+ ( '*' )* -> ^( TYPES ( type )+ ( '*' )* ) | struct_declaration )
            int alt52=2;
            int LA52_0 = input.LA(1);

            if ( (LA52_0==AUTO||(LA52_0 >= CDECL && LA52_0 <= CHAR)||LA52_0==CONST||LA52_0==DOUBLE||(LA52_0 >= EVENT && LA52_0 <= EXTERN)||LA52_0==FLOAT||LA52_0==IDENTIFIER||(LA52_0 >= INT && LA52_0 <= INT64)||LA52_0==LONG||LA52_0==REGISTER||LA52_0==SEMAPH||(LA52_0 >= SHORT && LA52_0 <= SIGNED)||LA52_0==STATIC||LA52_0==UNSIGNED||(LA52_0 >= VOID && LA52_0 <= W64)) ) {
                alt52=1;
            }
            else if ( (LA52_0==STRUCT||LA52_0==UNION) ) {
                alt52=2;
            }
            else {
                if (state.backtracking>0) {state.failed=true; return retval;}
                NoViableAltException nvae =
                    new NoViableAltException("", 52, 0, input);

                throw nvae;

            }
            switch (alt52) {
                case 1 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:335:4: ( type )+ ( '*' )*
                    {
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:335:4: ( type )+
                    int cnt50=0;
                    loop50:
                    do {
                        int alt50=2;
                        int LA50_0 = input.LA(1);

                        if ( (LA50_0==IDENTIFIER) ) {
                            int LA50_2 = input.LA(2);

                            if ( (LA50_2==AUTO||(LA50_2 >= CDECL && LA50_2 <= CHAR)||LA50_2==CONST||LA50_2==DOUBLE||(LA50_2 >= EVENT && LA50_2 <= EXTERN)||LA50_2==FLOAT||LA50_2==IDENTIFIER||LA50_2==INDIRECTION||(LA50_2 >= INT && LA50_2 <= INT64)||LA50_2==LONG||LA50_2==REGISTER||LA50_2==SEMAPH||(LA50_2 >= SHORT && LA50_2 <= SIGNED)||LA50_2==STATIC||LA50_2==UNSIGNED||(LA50_2 >= VOID && LA50_2 <= W64)) ) {
                                alt50=1;
                            }


                        }
                        else if ( (LA50_0==AUTO||(LA50_0 >= CDECL && LA50_0 <= CHAR)||LA50_0==CONST||LA50_0==DOUBLE||(LA50_0 >= EVENT && LA50_0 <= EXTERN)||LA50_0==FLOAT||(LA50_0 >= INT && LA50_0 <= INT64)||LA50_0==LONG||LA50_0==REGISTER||LA50_0==SEMAPH||(LA50_0 >= SHORT && LA50_0 <= SIGNED)||LA50_0==STATIC||LA50_0==UNSIGNED||(LA50_0 >= VOID && LA50_0 <= W64)) ) {
                            alt50=1;
                        }


                        switch (alt50) {
                    	case 1 :
                    	    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:335:4: type
                    	    {
                    	    pushFollow(FOLLOW_type_in_type_declaration2019);
                    	    type239=type();

                    	    state._fsp--;
                    	    if (state.failed) return retval;
                    	    if ( state.backtracking==0 ) stream_type.add(type239.getTree());

                    	    }
                    	    break;

                    	default :
                    	    if ( cnt50 >= 1 ) break loop50;
                    	    if (state.backtracking>0) {state.failed=true; return retval;}
                                EarlyExitException eee =
                                    new EarlyExitException(50, input);
                                throw eee;
                        }
                        cnt50++;
                    } while (true);


                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:335:10: ( '*' )*
                    loop51:
                    do {
                        int alt51=2;
                        int LA51_0 = input.LA(1);

                        if ( (LA51_0==INDIRECTION) ) {
                            alt51=1;
                        }


                        switch (alt51) {
                    	case 1 :
                    	    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:335:10: '*'
                    	    {
                    	    char_literal240=(Token)match(input,INDIRECTION,FOLLOW_INDIRECTION_in_type_declaration2022); if (state.failed) return retval; 
                    	    if ( state.backtracking==0 ) stream_INDIRECTION.add(char_literal240);


                    	    }
                    	    break;

                    	default :
                    	    break loop51;
                        }
                    } while (true);


                    // AST REWRITE
                    // elements: type, INDIRECTION
                    // token labels: 
                    // rule labels: retval
                    // token list labels: 
                    // rule list labels: 
                    // wildcard labels: 
                    if ( state.backtracking==0 ) {

                    retval.tree = root_0;
                    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null);

                    root_0 = (Object)adaptor.nil();
                    // 335:15: -> ^( TYPES ( type )+ ( '*' )* )
                    {
                        // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:335:18: ^( TYPES ( type )+ ( '*' )* )
                        {
                        Object root_1 = (Object)adaptor.nil();
                        root_1 = (Object)adaptor.becomeRoot(
                        (Object)adaptor.create(TYPES, "TYPES")
                        , root_1);

                        if ( !(stream_type.hasNext()) ) {
                            throw new RewriteEarlyExitException();
                        }
                        while ( stream_type.hasNext() ) {
                            adaptor.addChild(root_1, stream_type.nextTree());

                        }
                        stream_type.reset();

                        // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:335:32: ( '*' )*
                        while ( stream_INDIRECTION.hasNext() ) {
                            adaptor.addChild(root_1, 
                            stream_INDIRECTION.nextNode()
                            );

                        }
                        stream_INDIRECTION.reset();

                        adaptor.addChild(root_0, root_1);
                        }

                    }


                    retval.tree = root_0;
                    }

                    }
                    break;
                case 2 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:336:4: struct_declaration
                    {
                    root_0 = (Object)adaptor.nil();


                    pushFollow(FOLLOW_struct_declaration_in_type_declaration2040);
                    struct_declaration241=struct_declaration();

                    state._fsp--;
                    if (state.failed) return retval;
                    if ( state.backtracking==0 ) adaptor.addChild(root_0, struct_declaration241.getTree());

                    }
                    break;

            }
            retval.stop = input.LT(-1);


            if ( state.backtracking==0 ) {

            retval.tree = (Object)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }

        finally {
        	// do for sure before leaving
            if ( state.backtracking>0 ) { memoize(input, 49, type_declaration_StartIndex); }

        }
        return retval;
    }
    // $ANTLR end "type_declaration"


    public static class enum_declaration_return extends ParserRuleReturnScope {
        Object tree;
        public Object getTree() { return tree; }
    };


    // $ANTLR start "enum_declaration"
    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:339:1: enum_declaration options {k=3; } : ( ENUM '{' enumerator_list '}' | ENUM IDENTIFIER '{' enumerator_list '}' | ENUM IDENTIFIER );
    public final SCPARParser.enum_declaration_return enum_declaration() throws RecognitionException {
        SCPARParser.enum_declaration_return retval = new SCPARParser.enum_declaration_return();
        retval.start = input.LT(1);

        int enum_declaration_StartIndex = input.index();

        Object root_0 = null;

        Token ENUM242=null;
        Token char_literal243=null;
        Token char_literal245=null;
        Token ENUM246=null;
        Token IDENTIFIER247=null;
        Token char_literal248=null;
        Token char_literal250=null;
        Token ENUM251=null;
        Token IDENTIFIER252=null;
        SCPARParser.enumerator_list_return enumerator_list244 =null;

        SCPARParser.enumerator_list_return enumerator_list249 =null;


        Object ENUM242_tree=null;
        Object char_literal243_tree=null;
        Object char_literal245_tree=null;
        Object ENUM246_tree=null;
        Object IDENTIFIER247_tree=null;
        Object char_literal248_tree=null;
        Object char_literal250_tree=null;
        Object ENUM251_tree=null;
        Object IDENTIFIER252_tree=null;

        try {
            if ( state.backtracking>0 && alreadyParsedRule(input, 50) ) { return retval; }

            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:341:2: ( ENUM '{' enumerator_list '}' | ENUM IDENTIFIER '{' enumerator_list '}' | ENUM IDENTIFIER )
            int alt53=3;
            int LA53_0 = input.LA(1);

            if ( (LA53_0==ENUM) ) {
                int LA53_1 = input.LA(2);

                if ( (LA53_1==142) ) {
                    alt53=1;
                }
                else if ( (LA53_1==IDENTIFIER) ) {
                    int LA53_3 = input.LA(3);

                    if ( (LA53_3==142) ) {
                        alt53=2;
                    }
                    else if ( (LA53_3==EOF||LA53_3==AUTO||(LA53_3 >= CDECL && LA53_3 <= CHAR)||LA53_3==CONST||LA53_3==DOUBLE||LA53_3==ENUM||(LA53_3 >= EVENT && LA53_3 <= EXTERN)||LA53_3==FLOAT||LA53_3==IDENTIFIER||(LA53_3 >= INT && LA53_3 <= INT64)||(LA53_3 >= LONG && LA53_3 <= MAIN)||LA53_3==MONITOR||LA53_3==REGISTER||LA53_3==SEMAPH||(LA53_3 >= SHARED && LA53_3 <= SIGNED)||LA53_3==STATIC||LA53_3==STRUCT||LA53_3==TASK||LA53_3==UNION||LA53_3==UNSIGNED||(LA53_3 >= VOID && LA53_3 <= W64)) ) {
                        alt53=3;
                    }
                    else {
                        if (state.backtracking>0) {state.failed=true; return retval;}
                        NoViableAltException nvae =
                            new NoViableAltException("", 53, 3, input);

                        throw nvae;

                    }
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return retval;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 53, 1, input);

                    throw nvae;

                }
            }
            else {
                if (state.backtracking>0) {state.failed=true; return retval;}
                NoViableAltException nvae =
                    new NoViableAltException("", 53, 0, input);

                throw nvae;

            }
            switch (alt53) {
                case 1 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:341:4: ENUM '{' enumerator_list '}'
                    {
                    root_0 = (Object)adaptor.nil();


                    ENUM242=(Token)match(input,ENUM,FOLLOW_ENUM_in_enum_declaration2059); if (state.failed) return retval;
                    if ( state.backtracking==0 ) {
                    ENUM242_tree = 
                    (Object)adaptor.create(ENUM242)
                    ;
                    adaptor.addChild(root_0, ENUM242_tree);
                    }

                    char_literal243=(Token)match(input,142,FOLLOW_142_in_enum_declaration2061); if (state.failed) return retval;
                    if ( state.backtracking==0 ) {
                    char_literal243_tree = 
                    (Object)adaptor.create(char_literal243)
                    ;
                    adaptor.addChild(root_0, char_literal243_tree);
                    }

                    pushFollow(FOLLOW_enumerator_list_in_enum_declaration2063);
                    enumerator_list244=enumerator_list();

                    state._fsp--;
                    if (state.failed) return retval;
                    if ( state.backtracking==0 ) adaptor.addChild(root_0, enumerator_list244.getTree());

                    char_literal245=(Token)match(input,143,FOLLOW_143_in_enum_declaration2065); if (state.failed) return retval;
                    if ( state.backtracking==0 ) {
                    char_literal245_tree = 
                    (Object)adaptor.create(char_literal245)
                    ;
                    adaptor.addChild(root_0, char_literal245_tree);
                    }

                    }
                    break;
                case 2 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:342:4: ENUM IDENTIFIER '{' enumerator_list '}'
                    {
                    root_0 = (Object)adaptor.nil();


                    ENUM246=(Token)match(input,ENUM,FOLLOW_ENUM_in_enum_declaration2070); if (state.failed) return retval;
                    if ( state.backtracking==0 ) {
                    ENUM246_tree = 
                    (Object)adaptor.create(ENUM246)
                    ;
                    adaptor.addChild(root_0, ENUM246_tree);
                    }

                    IDENTIFIER247=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_enum_declaration2072); if (state.failed) return retval;
                    if ( state.backtracking==0 ) {
                    IDENTIFIER247_tree = 
                    (Object)adaptor.create(IDENTIFIER247)
                    ;
                    adaptor.addChild(root_0, IDENTIFIER247_tree);
                    }

                    char_literal248=(Token)match(input,142,FOLLOW_142_in_enum_declaration2074); if (state.failed) return retval;
                    if ( state.backtracking==0 ) {
                    char_literal248_tree = 
                    (Object)adaptor.create(char_literal248)
                    ;
                    adaptor.addChild(root_0, char_literal248_tree);
                    }

                    pushFollow(FOLLOW_enumerator_list_in_enum_declaration2076);
                    enumerator_list249=enumerator_list();

                    state._fsp--;
                    if (state.failed) return retval;
                    if ( state.backtracking==0 ) adaptor.addChild(root_0, enumerator_list249.getTree());

                    char_literal250=(Token)match(input,143,FOLLOW_143_in_enum_declaration2078); if (state.failed) return retval;
                    if ( state.backtracking==0 ) {
                    char_literal250_tree = 
                    (Object)adaptor.create(char_literal250)
                    ;
                    adaptor.addChild(root_0, char_literal250_tree);
                    }

                    }
                    break;
                case 3 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:343:5: ENUM IDENTIFIER
                    {
                    root_0 = (Object)adaptor.nil();


                    ENUM251=(Token)match(input,ENUM,FOLLOW_ENUM_in_enum_declaration2084); if (state.failed) return retval;
                    if ( state.backtracking==0 ) {
                    ENUM251_tree = 
                    (Object)adaptor.create(ENUM251)
                    ;
                    adaptor.addChild(root_0, ENUM251_tree);
                    }

                    IDENTIFIER252=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_enum_declaration2086); if (state.failed) return retval;
                    if ( state.backtracking==0 ) {
                    IDENTIFIER252_tree = 
                    (Object)adaptor.create(IDENTIFIER252)
                    ;
                    adaptor.addChild(root_0, IDENTIFIER252_tree);
                    }

                    }
                    break;

            }
            retval.stop = input.LT(-1);


            if ( state.backtracking==0 ) {

            retval.tree = (Object)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }

        finally {
        	// do for sure before leaving
            if ( state.backtracking>0 ) { memoize(input, 50, enum_declaration_StartIndex); }

        }
        return retval;
    }
    // $ANTLR end "enum_declaration"


    public static class enumerator_list_return extends ParserRuleReturnScope {
        Object tree;
        public Object getTree() { return tree; }
    };


    // $ANTLR start "enumerator_list"
    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:346:1: enumerator_list : enumerator ( ',' enumerator )* ;
    public final SCPARParser.enumerator_list_return enumerator_list() throws RecognitionException {
        SCPARParser.enumerator_list_return retval = new SCPARParser.enumerator_list_return();
        retval.start = input.LT(1);

        int enumerator_list_StartIndex = input.index();

        Object root_0 = null;

        Token char_literal254=null;
        SCPARParser.enumerator_return enumerator253 =null;

        SCPARParser.enumerator_return enumerator255 =null;


        Object char_literal254_tree=null;

        try {
            if ( state.backtracking>0 && alreadyParsedRule(input, 51) ) { return retval; }

            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:347:2: ( enumerator ( ',' enumerator )* )
            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:347:4: enumerator ( ',' enumerator )*
            {
            root_0 = (Object)adaptor.nil();


            pushFollow(FOLLOW_enumerator_in_enumerator_list2100);
            enumerator253=enumerator();

            state._fsp--;
            if (state.failed) return retval;
            if ( state.backtracking==0 ) adaptor.addChild(root_0, enumerator253.getTree());

            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:347:15: ( ',' enumerator )*
            loop54:
            do {
                int alt54=2;
                int LA54_0 = input.LA(1);

                if ( (LA54_0==133) ) {
                    alt54=1;
                }


                switch (alt54) {
            	case 1 :
            	    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:347:16: ',' enumerator
            	    {
            	    char_literal254=(Token)match(input,133,FOLLOW_133_in_enumerator_list2103); if (state.failed) return retval;
            	    if ( state.backtracking==0 ) {
            	    char_literal254_tree = 
            	    (Object)adaptor.create(char_literal254)
            	    ;
            	    adaptor.addChild(root_0, char_literal254_tree);
            	    }

            	    pushFollow(FOLLOW_enumerator_in_enumerator_list2105);
            	    enumerator255=enumerator();

            	    state._fsp--;
            	    if (state.failed) return retval;
            	    if ( state.backtracking==0 ) adaptor.addChild(root_0, enumerator255.getTree());

            	    }
            	    break;

            	default :
            	    break loop54;
                }
            } while (true);


            }

            retval.stop = input.LT(-1);


            if ( state.backtracking==0 ) {

            retval.tree = (Object)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }

        finally {
        	// do for sure before leaving
            if ( state.backtracking>0 ) { memoize(input, 51, enumerator_list_StartIndex); }

        }
        return retval;
    }
    // $ANTLR end "enumerator_list"


    public static class enumerator_return extends ParserRuleReturnScope {
        Object tree;
        public Object getTree() { return tree; }
    };


    // $ANTLR start "enumerator"
    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:350:1: enumerator : IDENTIFIER ( '=' constant_expression )? -> ^( IDENTIFIER ( constant_expression )? ) ;
    public final SCPARParser.enumerator_return enumerator() throws RecognitionException {
        SCPARParser.enumerator_return retval = new SCPARParser.enumerator_return();
        retval.start = input.LT(1);

        int enumerator_StartIndex = input.index();

        Object root_0 = null;

        Token IDENTIFIER256=null;
        Token char_literal257=null;
        SCPARParser.constant_expression_return constant_expression258 =null;


        Object IDENTIFIER256_tree=null;
        Object char_literal257_tree=null;
        RewriteRuleTokenStream stream_ASGN_EQUAL=new RewriteRuleTokenStream(adaptor,"token ASGN_EQUAL");
        RewriteRuleTokenStream stream_IDENTIFIER=new RewriteRuleTokenStream(adaptor,"token IDENTIFIER");
        RewriteRuleSubtreeStream stream_constant_expression=new RewriteRuleSubtreeStream(adaptor,"rule constant_expression");
        try {
            if ( state.backtracking>0 && alreadyParsedRule(input, 52) ) { return retval; }

            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:351:2: ( IDENTIFIER ( '=' constant_expression )? -> ^( IDENTIFIER ( constant_expression )? ) )
            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:351:4: IDENTIFIER ( '=' constant_expression )?
            {
            IDENTIFIER256=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_enumerator2118); if (state.failed) return retval; 
            if ( state.backtracking==0 ) stream_IDENTIFIER.add(IDENTIFIER256);


            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:351:15: ( '=' constant_expression )?
            int alt55=2;
            int LA55_0 = input.LA(1);

            if ( (LA55_0==ASGN_EQUAL) ) {
                alt55=1;
            }
            switch (alt55) {
                case 1 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:351:16: '=' constant_expression
                    {
                    char_literal257=(Token)match(input,ASGN_EQUAL,FOLLOW_ASGN_EQUAL_in_enumerator2121); if (state.failed) return retval; 
                    if ( state.backtracking==0 ) stream_ASGN_EQUAL.add(char_literal257);


                    pushFollow(FOLLOW_constant_expression_in_enumerator2123);
                    constant_expression258=constant_expression();

                    state._fsp--;
                    if (state.failed) return retval;
                    if ( state.backtracking==0 ) stream_constant_expression.add(constant_expression258.getTree());

                    }
                    break;

            }


            // AST REWRITE
            // elements: constant_expression, IDENTIFIER
            // token labels: 
            // rule labels: retval
            // token list labels: 
            // rule list labels: 
            // wildcard labels: 
            if ( state.backtracking==0 ) {

            retval.tree = root_0;
            RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null);

            root_0 = (Object)adaptor.nil();
            // 351:42: -> ^( IDENTIFIER ( constant_expression )? )
            {
                // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:351:45: ^( IDENTIFIER ( constant_expression )? )
                {
                Object root_1 = (Object)adaptor.nil();
                root_1 = (Object)adaptor.becomeRoot(
                stream_IDENTIFIER.nextNode()
                , root_1);

                // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:351:58: ( constant_expression )?
                if ( stream_constant_expression.hasNext() ) {
                    adaptor.addChild(root_1, stream_constant_expression.nextTree());

                }
                stream_constant_expression.reset();

                adaptor.addChild(root_0, root_1);
                }

            }


            retval.tree = root_0;
            }

            }

            retval.stop = input.LT(-1);


            if ( state.backtracking==0 ) {

            retval.tree = (Object)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }

        finally {
        	// do for sure before leaving
            if ( state.backtracking>0 ) { memoize(input, 52, enumerator_StartIndex); }

        }
        return retval;
    }
    // $ANTLR end "enumerator"


    public static class struct_declaration_return extends ParserRuleReturnScope {
        Object tree;
        public Object getTree() { return tree; }
    };


    // $ANTLR start "struct_declaration"
    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:354:1: struct_declaration options {k=3; } : ( struct_or_union ( IDENTIFIER )? '{' struct_member_list '}' | struct_or_union IDENTIFIER );
    public final SCPARParser.struct_declaration_return struct_declaration() throws RecognitionException {
        SCPARParser.struct_declaration_return retval = new SCPARParser.struct_declaration_return();
        retval.start = input.LT(1);

        int struct_declaration_StartIndex = input.index();

        Object root_0 = null;

        Token IDENTIFIER260=null;
        Token char_literal261=null;
        Token char_literal263=null;
        Token IDENTIFIER265=null;
        SCPARParser.struct_or_union_return struct_or_union259 =null;

        SCPARParser.struct_member_list_return struct_member_list262 =null;

        SCPARParser.struct_or_union_return struct_or_union264 =null;


        Object IDENTIFIER260_tree=null;
        Object char_literal261_tree=null;
        Object char_literal263_tree=null;
        Object IDENTIFIER265_tree=null;

        try {
            if ( state.backtracking>0 && alreadyParsedRule(input, 53) ) { return retval; }

            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:356:2: ( struct_or_union ( IDENTIFIER )? '{' struct_member_list '}' | struct_or_union IDENTIFIER )
            int alt57=2;
            int LA57_0 = input.LA(1);

            if ( (LA57_0==STRUCT||LA57_0==UNION) ) {
                int LA57_1 = input.LA(2);

                if ( (LA57_1==IDENTIFIER) ) {
                    int LA57_2 = input.LA(3);

                    if ( (LA57_2==142) ) {
                        alt57=1;
                    }
                    else if ( (LA57_2==IDENTIFIER) ) {
                        alt57=2;
                    }
                    else {
                        if (state.backtracking>0) {state.failed=true; return retval;}
                        NoViableAltException nvae =
                            new NoViableAltException("", 57, 2, input);

                        throw nvae;

                    }
                }
                else if ( (LA57_1==142) ) {
                    alt57=1;
                }
                else {
                    if (state.backtracking>0) {state.failed=true; return retval;}
                    NoViableAltException nvae =
                        new NoViableAltException("", 57, 1, input);

                    throw nvae;

                }
            }
            else {
                if (state.backtracking>0) {state.failed=true; return retval;}
                NoViableAltException nvae =
                    new NoViableAltException("", 57, 0, input);

                throw nvae;

            }
            switch (alt57) {
                case 1 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:356:4: struct_or_union ( IDENTIFIER )? '{' struct_member_list '}'
                    {
                    root_0 = (Object)adaptor.nil();


                    pushFollow(FOLLOW_struct_or_union_in_struct_declaration2154);
                    struct_or_union259=struct_or_union();

                    state._fsp--;
                    if (state.failed) return retval;
                    if ( state.backtracking==0 ) adaptor.addChild(root_0, struct_or_union259.getTree());

                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:356:20: ( IDENTIFIER )?
                    int alt56=2;
                    int LA56_0 = input.LA(1);

                    if ( (LA56_0==IDENTIFIER) ) {
                        alt56=1;
                    }
                    switch (alt56) {
                        case 1 :
                            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:356:20: IDENTIFIER
                            {
                            IDENTIFIER260=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_struct_declaration2156); if (state.failed) return retval;
                            if ( state.backtracking==0 ) {
                            IDENTIFIER260_tree = 
                            (Object)adaptor.create(IDENTIFIER260)
                            ;
                            adaptor.addChild(root_0, IDENTIFIER260_tree);
                            }

                            }
                            break;

                    }


                    char_literal261=(Token)match(input,142,FOLLOW_142_in_struct_declaration2159); if (state.failed) return retval;
                    if ( state.backtracking==0 ) {
                    char_literal261_tree = 
                    (Object)adaptor.create(char_literal261)
                    ;
                    adaptor.addChild(root_0, char_literal261_tree);
                    }

                    pushFollow(FOLLOW_struct_member_list_in_struct_declaration2161);
                    struct_member_list262=struct_member_list();

                    state._fsp--;
                    if (state.failed) return retval;
                    if ( state.backtracking==0 ) adaptor.addChild(root_0, struct_member_list262.getTree());

                    char_literal263=(Token)match(input,143,FOLLOW_143_in_struct_declaration2163); if (state.failed) return retval;
                    if ( state.backtracking==0 ) {
                    char_literal263_tree = 
                    (Object)adaptor.create(char_literal263)
                    ;
                    adaptor.addChild(root_0, char_literal263_tree);
                    }

                    }
                    break;
                case 2 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:357:4: struct_or_union IDENTIFIER
                    {
                    root_0 = (Object)adaptor.nil();


                    pushFollow(FOLLOW_struct_or_union_in_struct_declaration2168);
                    struct_or_union264=struct_or_union();

                    state._fsp--;
                    if (state.failed) return retval;
                    if ( state.backtracking==0 ) adaptor.addChild(root_0, struct_or_union264.getTree());

                    IDENTIFIER265=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_struct_declaration2170); if (state.failed) return retval;
                    if ( state.backtracking==0 ) {
                    IDENTIFIER265_tree = 
                    (Object)adaptor.create(IDENTIFIER265)
                    ;
                    adaptor.addChild(root_0, IDENTIFIER265_tree);
                    }

                    }
                    break;

            }
            retval.stop = input.LT(-1);


            if ( state.backtracking==0 ) {

            retval.tree = (Object)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }

        finally {
        	// do for sure before leaving
            if ( state.backtracking>0 ) { memoize(input, 53, struct_declaration_StartIndex); }

        }
        return retval;
    }
    // $ANTLR end "struct_declaration"


    public static class struct_member_list_return extends ParserRuleReturnScope {
        Object tree;
        public Object getTree() { return tree; }
    };


    // $ANTLR start "struct_member_list"
    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:360:1: struct_member_list : ( struct_member )+ ;
    public final SCPARParser.struct_member_list_return struct_member_list() throws RecognitionException {
        SCPARParser.struct_member_list_return retval = new SCPARParser.struct_member_list_return();
        retval.start = input.LT(1);

        int struct_member_list_StartIndex = input.index();

        Object root_0 = null;

        SCPARParser.struct_member_return struct_member266 =null;



        try {
            if ( state.backtracking>0 && alreadyParsedRule(input, 54) ) { return retval; }

            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:361:2: ( ( struct_member )+ )
            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:361:4: ( struct_member )+
            {
            root_0 = (Object)adaptor.nil();


            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:361:4: ( struct_member )+
            int cnt58=0;
            loop58:
            do {
                int alt58=2;
                int LA58_0 = input.LA(1);

                if ( (LA58_0==AUTO||(LA58_0 >= CDECL && LA58_0 <= CHAR)||LA58_0==CONST||LA58_0==DOUBLE||(LA58_0 >= EVENT && LA58_0 <= EXTERN)||LA58_0==FLOAT||LA58_0==IDENTIFIER||(LA58_0 >= INT && LA58_0 <= INT64)||LA58_0==LONG||LA58_0==REGISTER||LA58_0==SEMAPH||(LA58_0 >= SHORT && LA58_0 <= SIGNED)||LA58_0==STATIC||LA58_0==STRUCT||LA58_0==UNION||LA58_0==UNSIGNED||(LA58_0 >= VOID && LA58_0 <= W64)) ) {
                    alt58=1;
                }


                switch (alt58) {
            	case 1 :
            	    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:361:4: struct_member
            	    {
            	    pushFollow(FOLLOW_struct_member_in_struct_member_list2182);
            	    struct_member266=struct_member();

            	    state._fsp--;
            	    if (state.failed) return retval;
            	    if ( state.backtracking==0 ) adaptor.addChild(root_0, struct_member266.getTree());

            	    }
            	    break;

            	default :
            	    if ( cnt58 >= 1 ) break loop58;
            	    if (state.backtracking>0) {state.failed=true; return retval;}
                        EarlyExitException eee =
                            new EarlyExitException(58, input);
                        throw eee;
                }
                cnt58++;
            } while (true);


            }

            retval.stop = input.LT(-1);


            if ( state.backtracking==0 ) {

            retval.tree = (Object)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }

        finally {
        	// do for sure before leaving
            if ( state.backtracking>0 ) { memoize(input, 54, struct_member_list_StartIndex); }

        }
        return retval;
    }
    // $ANTLR end "struct_member_list"


    public static class struct_member_return extends ParserRuleReturnScope {
        Object tree;
        public Object getTree() { return tree; }
    };


    // $ANTLR start "struct_member"
    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:364:1: struct_member : type_declaration IDENTIFIER ';' ;
    public final SCPARParser.struct_member_return struct_member() throws RecognitionException {
        SCPARParser.struct_member_return retval = new SCPARParser.struct_member_return();
        retval.start = input.LT(1);

        int struct_member_StartIndex = input.index();

        Object root_0 = null;

        Token IDENTIFIER268=null;
        Token char_literal269=null;
        SCPARParser.type_declaration_return type_declaration267 =null;


        Object IDENTIFIER268_tree=null;
        Object char_literal269_tree=null;

        try {
            if ( state.backtracking>0 && alreadyParsedRule(input, 55) ) { return retval; }

            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:365:2: ( type_declaration IDENTIFIER ';' )
            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:365:4: type_declaration IDENTIFIER ';'
            {
            root_0 = (Object)adaptor.nil();


            pushFollow(FOLLOW_type_declaration_in_struct_member2194);
            type_declaration267=type_declaration();

            state._fsp--;
            if (state.failed) return retval;
            if ( state.backtracking==0 ) adaptor.addChild(root_0, type_declaration267.getTree());

            IDENTIFIER268=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_struct_member2196); if (state.failed) return retval;
            if ( state.backtracking==0 ) {
            IDENTIFIER268_tree = 
            (Object)adaptor.create(IDENTIFIER268)
            ;
            adaptor.addChild(root_0, IDENTIFIER268_tree);
            }

            char_literal269=(Token)match(input,138,FOLLOW_138_in_struct_member2198); if (state.failed) return retval;
            if ( state.backtracking==0 ) {
            char_literal269_tree = 
            (Object)adaptor.create(char_literal269)
            ;
            adaptor.addChild(root_0, char_literal269_tree);
            }

            }

            retval.stop = input.LT(-1);


            if ( state.backtracking==0 ) {

            retval.tree = (Object)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }

        finally {
        	// do for sure before leaving
            if ( state.backtracking>0 ) { memoize(input, 55, struct_member_StartIndex); }

        }
        return retval;
    }
    // $ANTLR end "struct_member"


    public static class struct_or_union_return extends ParserRuleReturnScope {
        Object tree;
        public Object getTree() { return tree; }
    };


    // $ANTLR start "struct_or_union"
    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:368:1: struct_or_union : ( STRUCT | UNION );
    public final SCPARParser.struct_or_union_return struct_or_union() throws RecognitionException {
        SCPARParser.struct_or_union_return retval = new SCPARParser.struct_or_union_return();
        retval.start = input.LT(1);

        int struct_or_union_StartIndex = input.index();

        Object root_0 = null;

        Token set270=null;

        Object set270_tree=null;

        try {
            if ( state.backtracking>0 && alreadyParsedRule(input, 56) ) { return retval; }

            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:369:2: ( STRUCT | UNION )
            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:
            {
            root_0 = (Object)adaptor.nil();


            set270=(Token)input.LT(1);

            if ( input.LA(1)==STRUCT||input.LA(1)==UNION ) {
                input.consume();
                if ( state.backtracking==0 ) adaptor.addChild(root_0, 
                (Object)adaptor.create(set270)
                );
                state.errorRecovery=false;
                state.failed=false;
            }
            else {
                if (state.backtracking>0) {state.failed=true; return retval;}
                MismatchedSetException mse = new MismatchedSetException(null,input);
                throw mse;
            }


            }

            retval.stop = input.LT(-1);


            if ( state.backtracking==0 ) {

            retval.tree = (Object)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }

        finally {
        	// do for sure before leaving
            if ( state.backtracking>0 ) { memoize(input, 56, struct_or_union_StartIndex); }

        }
        return retval;
    }
    // $ANTLR end "struct_or_union"


    public static class type_return extends ParserRuleReturnScope {
        Object tree;
        public Object getTree() { return tree; }
    };


    // $ANTLR start "type"
    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:373:1: type : ( ( type_modifier )* generic_type | cpar_type );
    public final SCPARParser.type_return type() throws RecognitionException {
        SCPARParser.type_return retval = new SCPARParser.type_return();
        retval.start = input.LT(1);

        int type_StartIndex = input.index();

        Object root_0 = null;

        SCPARParser.type_modifier_return type_modifier271 =null;

        SCPARParser.generic_type_return generic_type272 =null;

        SCPARParser.cpar_type_return cpar_type273 =null;



        try {
            if ( state.backtracking>0 && alreadyParsedRule(input, 57) ) { return retval; }

            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:374:2: ( ( type_modifier )* generic_type | cpar_type )
            int alt60=2;
            int LA60_0 = input.LA(1);

            if ( (LA60_0==AUTO||(LA60_0 >= CDECL && LA60_0 <= CHAR)||LA60_0==CONST||LA60_0==DOUBLE||LA60_0==EXTERN||LA60_0==FLOAT||LA60_0==IDENTIFIER||(LA60_0 >= INT && LA60_0 <= INT64)||LA60_0==LONG||LA60_0==REGISTER||(LA60_0 >= SHORT && LA60_0 <= SIGNED)||LA60_0==STATIC||LA60_0==UNSIGNED||(LA60_0 >= VOID && LA60_0 <= W64)) ) {
                alt60=1;
            }
            else if ( (LA60_0==EVENT||LA60_0==SEMAPH) ) {
                alt60=2;
            }
            else {
                if (state.backtracking>0) {state.failed=true; return retval;}
                NoViableAltException nvae =
                    new NoViableAltException("", 60, 0, input);

                throw nvae;

            }
            switch (alt60) {
                case 1 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:374:4: ( type_modifier )* generic_type
                    {
                    root_0 = (Object)adaptor.nil();


                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:374:4: ( type_modifier )*
                    loop59:
                    do {
                        int alt59=2;
                        int LA59_0 = input.LA(1);

                        if ( (LA59_0==AUTO||LA59_0==CDECL||LA59_0==CONST||LA59_0==EXTERN||LA59_0==REGISTER||LA59_0==STATIC||LA59_0==VOLATILE) ) {
                            alt59=1;
                        }


                        switch (alt59) {
                    	case 1 :
                    	    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:374:4: type_modifier
                    	    {
                    	    pushFollow(FOLLOW_type_modifier_in_type2228);
                    	    type_modifier271=type_modifier();

                    	    state._fsp--;
                    	    if (state.failed) return retval;
                    	    if ( state.backtracking==0 ) adaptor.addChild(root_0, type_modifier271.getTree());

                    	    }
                    	    break;

                    	default :
                    	    break loop59;
                        }
                    } while (true);


                    pushFollow(FOLLOW_generic_type_in_type2231);
                    generic_type272=generic_type();

                    state._fsp--;
                    if (state.failed) return retval;
                    if ( state.backtracking==0 ) adaptor.addChild(root_0, generic_type272.getTree());

                    }
                    break;
                case 2 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:375:4: cpar_type
                    {
                    root_0 = (Object)adaptor.nil();


                    pushFollow(FOLLOW_cpar_type_in_type2236);
                    cpar_type273=cpar_type();

                    state._fsp--;
                    if (state.failed) return retval;
                    if ( state.backtracking==0 ) adaptor.addChild(root_0, cpar_type273.getTree());

                    }
                    break;

            }
            retval.stop = input.LT(-1);


            if ( state.backtracking==0 ) {

            retval.tree = (Object)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }

        finally {
        	// do for sure before leaving
            if ( state.backtracking>0 ) { memoize(input, 57, type_StartIndex); }

        }
        return retval;
    }
    // $ANTLR end "type"


    public static class type_modifier_return extends ParserRuleReturnScope {
        Object tree;
        public Object getTree() { return tree; }
    };


    // $ANTLR start "type_modifier"
    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:378:1: type_modifier : ( CONST | VOLATILE | EXTERN | STATIC | AUTO | REGISTER | CDECL );
    public final SCPARParser.type_modifier_return type_modifier() throws RecognitionException {
        SCPARParser.type_modifier_return retval = new SCPARParser.type_modifier_return();
        retval.start = input.LT(1);

        int type_modifier_StartIndex = input.index();

        Object root_0 = null;

        Token set274=null;

        Object set274_tree=null;

        try {
            if ( state.backtracking>0 && alreadyParsedRule(input, 58) ) { return retval; }

            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:379:2: ( CONST | VOLATILE | EXTERN | STATIC | AUTO | REGISTER | CDECL )
            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:
            {
            root_0 = (Object)adaptor.nil();


            set274=(Token)input.LT(1);

            if ( input.LA(1)==AUTO||input.LA(1)==CDECL||input.LA(1)==CONST||input.LA(1)==EXTERN||input.LA(1)==REGISTER||input.LA(1)==STATIC||input.LA(1)==VOLATILE ) {
                input.consume();
                if ( state.backtracking==0 ) adaptor.addChild(root_0, 
                (Object)adaptor.create(set274)
                );
                state.errorRecovery=false;
                state.failed=false;
            }
            else {
                if (state.backtracking>0) {state.failed=true; return retval;}
                MismatchedSetException mse = new MismatchedSetException(null,input);
                throw mse;
            }


            }

            retval.stop = input.LT(-1);


            if ( state.backtracking==0 ) {

            retval.tree = (Object)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }

        finally {
        	// do for sure before leaving
            if ( state.backtracking>0 ) { memoize(input, 58, type_modifier_StartIndex); }

        }
        return retval;
    }
    // $ANTLR end "type_modifier"


    public static class generic_type_return extends ParserRuleReturnScope {
        Object tree;
        public Object getTree() { return tree; }
    };


    // $ANTLR start "generic_type"
    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:388:1: generic_type : ( VOID | CHAR | SHORT | INT | LONG | FLOAT | DOUBLE | SIGNED | UNSIGNED | W64 | INT64 | type_id );
    public final SCPARParser.generic_type_return generic_type() throws RecognitionException {
        SCPARParser.generic_type_return retval = new SCPARParser.generic_type_return();
        retval.start = input.LT(1);

        int generic_type_StartIndex = input.index();

        Object root_0 = null;

        Token VOID275=null;
        Token CHAR276=null;
        Token SHORT277=null;
        Token INT278=null;
        Token LONG279=null;
        Token FLOAT280=null;
        Token DOUBLE281=null;
        Token SIGNED282=null;
        Token UNSIGNED283=null;
        Token W64284=null;
        Token INT64285=null;
        SCPARParser.type_id_return type_id286 =null;


        Object VOID275_tree=null;
        Object CHAR276_tree=null;
        Object SHORT277_tree=null;
        Object INT278_tree=null;
        Object LONG279_tree=null;
        Object FLOAT280_tree=null;
        Object DOUBLE281_tree=null;
        Object SIGNED282_tree=null;
        Object UNSIGNED283_tree=null;
        Object W64284_tree=null;
        Object INT64285_tree=null;

        try {
            if ( state.backtracking>0 && alreadyParsedRule(input, 59) ) { return retval; }

            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:389:2: ( VOID | CHAR | SHORT | INT | LONG | FLOAT | DOUBLE | SIGNED | UNSIGNED | W64 | INT64 | type_id )
            int alt61=12;
            switch ( input.LA(1) ) {
            case VOID:
                {
                alt61=1;
                }
                break;
            case CHAR:
                {
                alt61=2;
                }
                break;
            case SHORT:
                {
                alt61=3;
                }
                break;
            case INT:
                {
                alt61=4;
                }
                break;
            case LONG:
                {
                alt61=5;
                }
                break;
            case FLOAT:
                {
                alt61=6;
                }
                break;
            case DOUBLE:
                {
                alt61=7;
                }
                break;
            case SIGNED:
                {
                alt61=8;
                }
                break;
            case UNSIGNED:
                {
                alt61=9;
                }
                break;
            case W64:
                {
                alt61=10;
                }
                break;
            case INT64:
                {
                alt61=11;
                }
                break;
            case IDENTIFIER:
                {
                alt61=12;
                }
                break;
            default:
                if (state.backtracking>0) {state.failed=true; return retval;}
                NoViableAltException nvae =
                    new NoViableAltException("", 61, 0, input);

                throw nvae;

            }

            switch (alt61) {
                case 1 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:389:4: VOID
                    {
                    root_0 = (Object)adaptor.nil();


                    VOID275=(Token)match(input,VOID,FOLLOW_VOID_in_generic_type2290); if (state.failed) return retval;
                    if ( state.backtracking==0 ) {
                    VOID275_tree = 
                    (Object)adaptor.create(VOID275)
                    ;
                    adaptor.addChild(root_0, VOID275_tree);
                    }

                    }
                    break;
                case 2 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:390:4: CHAR
                    {
                    root_0 = (Object)adaptor.nil();


                    CHAR276=(Token)match(input,CHAR,FOLLOW_CHAR_in_generic_type2295); if (state.failed) return retval;
                    if ( state.backtracking==0 ) {
                    CHAR276_tree = 
                    (Object)adaptor.create(CHAR276)
                    ;
                    adaptor.addChild(root_0, CHAR276_tree);
                    }

                    }
                    break;
                case 3 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:391:4: SHORT
                    {
                    root_0 = (Object)adaptor.nil();


                    SHORT277=(Token)match(input,SHORT,FOLLOW_SHORT_in_generic_type2300); if (state.failed) return retval;
                    if ( state.backtracking==0 ) {
                    SHORT277_tree = 
                    (Object)adaptor.create(SHORT277)
                    ;
                    adaptor.addChild(root_0, SHORT277_tree);
                    }

                    }
                    break;
                case 4 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:392:4: INT
                    {
                    root_0 = (Object)adaptor.nil();


                    INT278=(Token)match(input,INT,FOLLOW_INT_in_generic_type2305); if (state.failed) return retval;
                    if ( state.backtracking==0 ) {
                    INT278_tree = 
                    (Object)adaptor.create(INT278)
                    ;
                    adaptor.addChild(root_0, INT278_tree);
                    }

                    }
                    break;
                case 5 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:393:4: LONG
                    {
                    root_0 = (Object)adaptor.nil();


                    LONG279=(Token)match(input,LONG,FOLLOW_LONG_in_generic_type2310); if (state.failed) return retval;
                    if ( state.backtracking==0 ) {
                    LONG279_tree = 
                    (Object)adaptor.create(LONG279)
                    ;
                    adaptor.addChild(root_0, LONG279_tree);
                    }

                    }
                    break;
                case 6 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:394:4: FLOAT
                    {
                    root_0 = (Object)adaptor.nil();


                    FLOAT280=(Token)match(input,FLOAT,FOLLOW_FLOAT_in_generic_type2315); if (state.failed) return retval;
                    if ( state.backtracking==0 ) {
                    FLOAT280_tree = 
                    (Object)adaptor.create(FLOAT280)
                    ;
                    adaptor.addChild(root_0, FLOAT280_tree);
                    }

                    }
                    break;
                case 7 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:395:4: DOUBLE
                    {
                    root_0 = (Object)adaptor.nil();


                    DOUBLE281=(Token)match(input,DOUBLE,FOLLOW_DOUBLE_in_generic_type2320); if (state.failed) return retval;
                    if ( state.backtracking==0 ) {
                    DOUBLE281_tree = 
                    (Object)adaptor.create(DOUBLE281)
                    ;
                    adaptor.addChild(root_0, DOUBLE281_tree);
                    }

                    }
                    break;
                case 8 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:396:4: SIGNED
                    {
                    root_0 = (Object)adaptor.nil();


                    SIGNED282=(Token)match(input,SIGNED,FOLLOW_SIGNED_in_generic_type2325); if (state.failed) return retval;
                    if ( state.backtracking==0 ) {
                    SIGNED282_tree = 
                    (Object)adaptor.create(SIGNED282)
                    ;
                    adaptor.addChild(root_0, SIGNED282_tree);
                    }

                    }
                    break;
                case 9 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:397:4: UNSIGNED
                    {
                    root_0 = (Object)adaptor.nil();


                    UNSIGNED283=(Token)match(input,UNSIGNED,FOLLOW_UNSIGNED_in_generic_type2330); if (state.failed) return retval;
                    if ( state.backtracking==0 ) {
                    UNSIGNED283_tree = 
                    (Object)adaptor.create(UNSIGNED283)
                    ;
                    adaptor.addChild(root_0, UNSIGNED283_tree);
                    }

                    }
                    break;
                case 10 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:398:4: W64
                    {
                    root_0 = (Object)adaptor.nil();


                    W64284=(Token)match(input,W64,FOLLOW_W64_in_generic_type2335); if (state.failed) return retval;
                    if ( state.backtracking==0 ) {
                    W64284_tree = 
                    (Object)adaptor.create(W64284)
                    ;
                    adaptor.addChild(root_0, W64284_tree);
                    }

                    }
                    break;
                case 11 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:399:4: INT64
                    {
                    root_0 = (Object)adaptor.nil();


                    INT64285=(Token)match(input,INT64,FOLLOW_INT64_in_generic_type2340); if (state.failed) return retval;
                    if ( state.backtracking==0 ) {
                    INT64285_tree = 
                    (Object)adaptor.create(INT64285)
                    ;
                    adaptor.addChild(root_0, INT64285_tree);
                    }

                    }
                    break;
                case 12 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:400:4: type_id
                    {
                    root_0 = (Object)adaptor.nil();


                    pushFollow(FOLLOW_type_id_in_generic_type2345);
                    type_id286=type_id();

                    state._fsp--;
                    if (state.failed) return retval;
                    if ( state.backtracking==0 ) adaptor.addChild(root_0, type_id286.getTree());

                    }
                    break;

            }
            retval.stop = input.LT(-1);


            if ( state.backtracking==0 ) {

            retval.tree = (Object)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }

        finally {
        	// do for sure before leaving
            if ( state.backtracking>0 ) { memoize(input, 59, generic_type_StartIndex); }

        }
        return retval;
    }
    // $ANTLR end "generic_type"


    public static class type_id_return extends ParserRuleReturnScope {
        Object tree;
        public Object getTree() { return tree; }
    };


    // $ANTLR start "type_id"
    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:403:1: type_id :{...}? IDENTIFIER -> IDENTIFIER ;
    public final SCPARParser.type_id_return type_id() throws RecognitionException {
        SCPARParser.type_id_return retval = new SCPARParser.type_id_return();
        retval.start = input.LT(1);

        int type_id_StartIndex = input.index();

        Object root_0 = null;

        Token IDENTIFIER287=null;

        Object IDENTIFIER287_tree=null;
        RewriteRuleTokenStream stream_IDENTIFIER=new RewriteRuleTokenStream(adaptor,"token IDENTIFIER");

        try {
            if ( state.backtracking>0 && alreadyParsedRule(input, 60) ) { return retval; }

            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:404:5: ({...}? IDENTIFIER -> IDENTIFIER )
            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:404:9: {...}? IDENTIFIER
            {
            if ( !((isTypeName(input.LT(1).getText()))) ) {
                if (state.backtracking>0) {state.failed=true; return retval;}
                throw new FailedPredicateException(input, "type_id", "isTypeName(input.LT(1).getText())");
            }

            IDENTIFIER287=(Token)match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_type_id2364); if (state.failed) return retval; 
            if ( state.backtracking==0 ) stream_IDENTIFIER.add(IDENTIFIER287);


            // AST REWRITE
            // elements: IDENTIFIER
            // token labels: 
            // rule labels: retval
            // token list labels: 
            // rule list labels: 
            // wildcard labels: 
            if ( state.backtracking==0 ) {

            retval.tree = root_0;
            RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null);

            root_0 = (Object)adaptor.nil();
            // 404:57: -> IDENTIFIER
            {
                adaptor.addChild(root_0, 
                stream_IDENTIFIER.nextNode()
                );

            }


            retval.tree = root_0;
            }

            }

            retval.stop = input.LT(-1);


            if ( state.backtracking==0 ) {

            retval.tree = (Object)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }

        finally {
        	// do for sure before leaving
            if ( state.backtracking>0 ) { memoize(input, 60, type_id_StartIndex); }

        }
        return retval;
    }
    // $ANTLR end "type_id"


    public static class cpar_type_return extends ParserRuleReturnScope {
        Object tree;
        public Object getTree() { return tree; }
    };


    // $ANTLR start "cpar_type"
    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:407:1: cpar_type : ( SEMAPH -> SEMAPH | EVENT -> EVENT );
    public final SCPARParser.cpar_type_return cpar_type() throws RecognitionException {
        SCPARParser.cpar_type_return retval = new SCPARParser.cpar_type_return();
        retval.start = input.LT(1);

        int cpar_type_StartIndex = input.index();

        Object root_0 = null;

        Token SEMAPH288=null;
        Token EVENT289=null;

        Object SEMAPH288_tree=null;
        Object EVENT289_tree=null;
        RewriteRuleTokenStream stream_EVENT=new RewriteRuleTokenStream(adaptor,"token EVENT");
        RewriteRuleTokenStream stream_SEMAPH=new RewriteRuleTokenStream(adaptor,"token SEMAPH");

        try {
            if ( state.backtracking>0 && alreadyParsedRule(input, 61) ) { return retval; }

            // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:408:2: ( SEMAPH -> SEMAPH | EVENT -> EVENT )
            int alt62=2;
            int LA62_0 = input.LA(1);

            if ( (LA62_0==SEMAPH) ) {
                alt62=1;
            }
            else if ( (LA62_0==EVENT) ) {
                alt62=2;
            }
            else {
                if (state.backtracking>0) {state.failed=true; return retval;}
                NoViableAltException nvae =
                    new NoViableAltException("", 62, 0, input);

                throw nvae;

            }
            switch (alt62) {
                case 1 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:408:4: SEMAPH
                    {
                    SEMAPH288=(Token)match(input,SEMAPH,FOLLOW_SEMAPH_in_cpar_type2384); if (state.failed) return retval; 
                    if ( state.backtracking==0 ) stream_SEMAPH.add(SEMAPH288);


                    // AST REWRITE
                    // elements: SEMAPH
                    // token labels: 
                    // rule labels: retval
                    // token list labels: 
                    // rule list labels: 
                    // wildcard labels: 
                    if ( state.backtracking==0 ) {

                    retval.tree = root_0;
                    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null);

                    root_0 = (Object)adaptor.nil();
                    // 408:11: -> SEMAPH
                    {
                        adaptor.addChild(root_0, 
                        new CPARType(stream_SEMAPH.nextToken())
                        );

                    }


                    retval.tree = root_0;
                    }

                    }
                    break;
                case 2 :
                    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:409:4: EVENT
                    {
                    EVENT289=(Token)match(input,EVENT,FOLLOW_EVENT_in_cpar_type2396); if (state.failed) return retval; 
                    if ( state.backtracking==0 ) stream_EVENT.add(EVENT289);


                    // AST REWRITE
                    // elements: EVENT
                    // token labels: 
                    // rule labels: retval
                    // token list labels: 
                    // rule list labels: 
                    // wildcard labels: 
                    if ( state.backtracking==0 ) {

                    retval.tree = root_0;
                    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null);

                    root_0 = (Object)adaptor.nil();
                    // 409:10: -> EVENT
                    {
                        adaptor.addChild(root_0, 
                        new CPARType(stream_EVENT.nextToken())
                        );

                    }


                    retval.tree = root_0;
                    }

                    }
                    break;

            }
            retval.stop = input.LT(-1);


            if ( state.backtracking==0 ) {

            retval.tree = (Object)adaptor.rulePostProcessing(root_0);
            adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
    	retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);

        }

        finally {
        	// do for sure before leaving
            if ( state.backtracking>0 ) { memoize(input, 61, cpar_type_StartIndex); }

        }
        return retval;
    }
    // $ANTLR end "cpar_type"

    // $ANTLR start synpred2_SCPAR
    public final void synpred2_SCPAR_fragment() throws RecognitionException {
        // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:63:4: ( var_declaration )
        // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:63:4: var_declaration
        {
        pushFollow(FOLLOW_var_declaration_in_synpred2_SCPAR162);
        var_declaration();

        state._fsp--;
        if (state.failed) return ;

        }

    }
    // $ANTLR end synpred2_SCPAR

    // $ANTLR start synpred4_SCPAR
    public final void synpred4_SCPAR_fragment() throws RecognitionException {
        // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:65:4: ( c_function )
        // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:65:4: c_function
        {
        pushFollow(FOLLOW_c_function_in_synpred4_SCPAR172);
        c_function();

        state._fsp--;
        if (state.failed) return ;

        }

    }
    // $ANTLR end synpred4_SCPAR

    // $ANTLR start synpred5_SCPAR
    public final void synpred5_SCPAR_fragment() throws RecognitionException {
        // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:66:4: ( main_function )
        // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:66:4: main_function
        {
        pushFollow(FOLLOW_main_function_in_synpred5_SCPAR177);
        main_function();

        state._fsp--;
        if (state.failed) return ;

        }

    }
    // $ANTLR end synpred5_SCPAR

    // $ANTLR start synpred17_SCPAR
    public final void synpred17_SCPAR_fragment() throws RecognitionException {
        // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:106:4: ( var_declaration )
        // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:106:4: var_declaration
        {
        pushFollow(FOLLOW_var_declaration_in_synpred17_SCPAR538);
        var_declaration();

        state._fsp--;
        if (state.failed) return ;

        }

    }
    // $ANTLR end synpred17_SCPAR

    // $ANTLR start synpred20_SCPAR
    public final void synpred20_SCPAR_fragment() throws RecognitionException {
        // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:114:4: ( function_call )
        // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:114:4: function_call
        {
        pushFollow(FOLLOW_function_call_in_synpred20_SCPAR586);
        function_call();

        state._fsp--;
        if (state.failed) return ;

        }

    }
    // $ANTLR end synpred20_SCPAR

    // $ANTLR start synpred22_SCPAR
    public final void synpred22_SCPAR_fragment() throws RecognitionException {
        // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:116:4: ( assignment_expression )
        // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:116:4: assignment_expression
        {
        pushFollow(FOLLOW_assignment_expression_in_synpred22_SCPAR604);
        assignment_expression();

        state._fsp--;
        if (state.failed) return ;

        }

    }
    // $ANTLR end synpred22_SCPAR

    // $ANTLR start synpred30_SCPAR
    public final void synpred30_SCPAR_fragment() throws RecognitionException {
        // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:132:11: ( expression )
        // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:132:11: expression
        {
        pushFollow(FOLLOW_expression_in_synpred30_SCPAR695);
        expression();

        state._fsp--;
        if (state.failed) return ;

        }

    }
    // $ANTLR end synpred30_SCPAR

    // $ANTLR start synpred34_SCPAR
    public final void synpred34_SCPAR_fragment() throws RecognitionException {
        // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:145:37: ( ELSE statement )
        // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:145:37: ELSE statement
        {
        match(input,ELSE,FOLLOW_ELSE_in_synpred34_SCPAR842); if (state.failed) return ;

        pushFollow(FOLLOW_statement_in_synpred34_SCPAR844);
        statement();

        state._fsp--;
        if (state.failed) return ;

        }

    }
    // $ANTLR end synpred34_SCPAR

    // $ANTLR start synpred54_SCPAR
    public final void synpred54_SCPAR_fragment() throws RecognitionException {
        // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:208:27: ( ',' assignment_expression )
        // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:208:27: ',' assignment_expression
        {
        match(input,133,FOLLOW_133_in_synpred54_SCPAR1266); if (state.failed) return ;

        pushFollow(FOLLOW_assignment_expression_in_synpred54_SCPAR1268);
        assignment_expression();

        state._fsp--;
        if (state.failed) return ;

        }

    }
    // $ANTLR end synpred54_SCPAR

    // $ANTLR start synpred55_SCPAR
    public final void synpred55_SCPAR_fragment() throws RecognitionException {
        // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:212:4: ( lvalue assignment_operator assignment_expression )
        // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:212:4: lvalue assignment_operator assignment_expression
        {
        pushFollow(FOLLOW_lvalue_in_synpred55_SCPAR1286);
        lvalue();

        state._fsp--;
        if (state.failed) return ;

        pushFollow(FOLLOW_assignment_operator_in_synpred55_SCPAR1288);
        assignment_operator();

        state._fsp--;
        if (state.failed) return ;

        pushFollow(FOLLOW_assignment_expression_in_synpred55_SCPAR1290);
        assignment_expression();

        state._fsp--;
        if (state.failed) return ;

        }

    }
    // $ANTLR end synpred55_SCPAR

    // $ANTLR start synpred57_SCPAR
    public final void synpred57_SCPAR_fragment() throws RecognitionException {
        // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:221:21: ( operator cast_expression )
        // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:221:21: operator cast_expression
        {
        pushFollow(FOLLOW_operator_in_synpred57_SCPAR1353);
        operator();

        state._fsp--;
        if (state.failed) return ;

        pushFollow(FOLLOW_cast_expression_in_synpred57_SCPAR1355);
        cast_expression();

        state._fsp--;
        if (state.failed) return ;

        }

    }
    // $ANTLR end synpred57_SCPAR

    // $ANTLR start synpred76_SCPAR
    public final void synpred76_SCPAR_fragment() throws RecognitionException {
        // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:245:4: ( '(' ( IDENTIFIER | '*' )+ ')' cast_expression )
        // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:245:4: '(' ( IDENTIFIER | '*' )+ ')' cast_expression
        {
        match(input,130,FOLLOW_130_in_synpred76_SCPAR1467); if (state.failed) return ;

        // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:245:8: ( IDENTIFIER | '*' )+
        int cnt64=0;
        loop64:
        do {
            int alt64=2;
            int LA64_0 = input.LA(1);

            if ( (LA64_0==IDENTIFIER||LA64_0==INDIRECTION) ) {
                alt64=1;
            }


            switch (alt64) {
        	case 1 :
        	    // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:
        	    {
        	    if ( input.LA(1)==IDENTIFIER||input.LA(1)==INDIRECTION ) {
        	        input.consume();
        	        state.errorRecovery=false;
        	        state.failed=false;
        	    }
        	    else {
        	        if (state.backtracking>0) {state.failed=true; return ;}
        	        MismatchedSetException mse = new MismatchedSetException(null,input);
        	        throw mse;
        	    }


        	    }
        	    break;

        	default :
        	    if ( cnt64 >= 1 ) break loop64;
        	    if (state.backtracking>0) {state.failed=true; return ;}
                    EarlyExitException eee =
                        new EarlyExitException(64, input);
                    throw eee;
            }
            cnt64++;
        } while (true);


        match(input,131,FOLLOW_131_in_synpred76_SCPAR1476); if (state.failed) return ;

        pushFollow(FOLLOW_cast_expression_in_synpred76_SCPAR1478);
        cast_expression();

        state._fsp--;
        if (state.failed) return ;

        }

    }
    // $ANTLR end synpred76_SCPAR

    // $ANTLR start synpred94_SCPAR
    public final void synpred94_SCPAR_fragment() throws RecognitionException {
        // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:285:4: ( function_call )
        // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:285:4: function_call
        {
        pushFollow(FOLLOW_function_call_in_synpred94_SCPAR1725);
        function_call();

        state._fsp--;
        if (state.failed) return ;

        }

    }
    // $ANTLR end synpred94_SCPAR

    // $ANTLR start synpred99_SCPAR
    public final void synpred99_SCPAR_fragment() throws RecognitionException {
        // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:294:23: ( postfix_expression )
        // G:\\Projetos\\cpar-trunk-v2\\compiler\\src\\org\\cpar\\compiler\\SCPAR.g:294:23: postfix_expression
        {
        pushFollow(FOLLOW_postfix_expression_in_synpred99_SCPAR1791);
        postfix_expression();

        state._fsp--;
        if (state.failed) return ;

        }

    }
    // $ANTLR end synpred99_SCPAR

    // Delegated rules

    public final boolean synpred22_SCPAR() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred22_SCPAR_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred54_SCPAR() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred54_SCPAR_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred4_SCPAR() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred4_SCPAR_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred2_SCPAR() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred2_SCPAR_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred99_SCPAR() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred99_SCPAR_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred94_SCPAR() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred94_SCPAR_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred76_SCPAR() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred76_SCPAR_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred30_SCPAR() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred30_SCPAR_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred34_SCPAR() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred34_SCPAR_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred55_SCPAR() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred55_SCPAR_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred5_SCPAR() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred5_SCPAR_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred57_SCPAR() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred57_SCPAR_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred20_SCPAR() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred20_SCPAR_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }
    public final boolean synpred17_SCPAR() {
        state.backtracking++;
        int start = input.mark();
        try {
            synpred17_SCPAR_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !state.failed;
        input.rewind(start);
        state.backtracking--;
        state.failed=false;
        return success;
    }


    protected DFA13 dfa13 = new DFA13(this);
    protected DFA42 dfa42 = new DFA42(this);
    protected DFA43 dfa43 = new DFA43(this);
    static final String DFA13_eotS =
        "\54\uffff";
    static final String DFA13_eofS =
        "\54\uffff";
    static final String DFA13_minS =
        "\2\4\2\uffff\5\4\1\0\3\4\1\0\6\10\1\0\2\4\1\0\6\10\1\4\2\0\6\10"+
        "\1\4\1\0\1\4\2\0";
    static final String DFA13_maxS =
        "\2\u008f\2\uffff\1\u0086\1\u008f\1\u0086\1\u008f\1\u0086\1\0\1\u0086"+
        "\1\u008f\1\u0086\1\0\6\u008d\1\0\1\u008f\1\u0086\1\0\6\u008d\1\u008f"+
        "\2\0\6\u008d\1\u008f\1\0\1\u008f\2\0";
    static final String DFA13_acceptS =
        "\2\uffff\1\2\1\1\50\uffff";
    static final String DFA13_specialS =
        "\11\uffff\1\6\3\uffff\1\7\6\uffff\1\1\2\uffff\1\10\7\uffff\1\0\1"+
        "\5\7\uffff\1\4\1\uffff\1\3\1\2}>";
    static final String[] DFA13_transitionS = {
            "\2\2\15\uffff\1\3\1\2\10\uffff\2\3\2\2\2\uffff\1\3\1\uffff\4"+
            "\2\1\uffff\1\2\1\3\3\uffff\2\3\2\uffff\1\3\3\2\5\uffff\1\2\1"+
            "\uffff\1\1\2\2\1\uffff\2\3\7\uffff\1\2\2\uffff\1\3\1\uffff\1"+
            "\2\2\uffff\1\2\1\uffff\1\2\3\uffff\1\2\1\uffff\2\2\1\3\4\2\1"+
            "\uffff\1\3\1\2\3\3\1\uffff\1\3\1\2\1\3\5\uffff\1\3\1\uffff\1"+
            "\2\1\3\4\uffff\3\3\2\2\1\uffff\1\2\2\uffff\1\2\1\uffff\1\2\1"+
            "\uffff\1\2\3\uffff\1\2\3\uffff\2\2",
            "\2\2\2\uffff\13\2\1\3\3\2\6\uffff\2\3\2\2\2\uffff\1\3\1\uffff"+
            "\4\2\1\uffff\1\2\1\3\2\uffff\1\2\2\3\2\uffff\1\3\3\2\3\uffff"+
            "\3\2\1\uffff\1\5\1\2\1\4\1\uffff\2\3\1\uffff\3\2\3\uffff\3\2"+
            "\1\3\1\uffff\1\2\2\uffff\3\2\3\uffff\1\2\1\uffff\2\2\1\3\5\2"+
            "\1\3\1\2\1\uffff\2\3\1\uffff\1\3\1\2\10\uffff\1\2\1\3\4\uffff"+
            "\3\3\2\2\1\uffff\1\2\1\uffff\2\2\1\uffff\1\2\1\uffff\3\2\1\uffff"+
            "\3\2\1\uffff\2\2",
            "",
            "",
            "\2\2\16\uffff\1\2\12\uffff\1\2\5\uffff\4\2\13\uffff\1\2\7\uffff"+
            "\1\2\1\uffff\1\7\1\uffff\1\6\12\uffff\1\2\4\uffff\1\2\2\uffff"+
            "\1\2\1\uffff\1\2\5\uffff\2\2\1\uffff\3\2\3\uffff\1\2\5\uffff"+
            "\1\2\10\uffff\1\2\10\uffff\2\2\4\uffff\1\2\1\uffff\1\2\1\uffff"+
            "\1\2",
            "\2\2\2\uffff\13\2\1\3\3\2\6\uffff\2\3\2\2\2\uffff\1\3\1\uffff"+
            "\4\2\1\uffff\1\2\1\3\2\uffff\1\2\2\3\2\uffff\1\3\3\2\3\uffff"+
            "\3\2\1\uffff\1\5\1\2\1\4\1\uffff\2\3\1\uffff\3\2\3\uffff\3\2"+
            "\1\3\1\uffff\1\2\2\uffff\3\2\3\uffff\1\2\1\uffff\2\2\1\3\5\2"+
            "\1\3\1\2\1\uffff\2\3\1\uffff\1\3\1\2\10\uffff\1\2\1\3\4\uffff"+
            "\3\3\2\2\1\uffff\1\2\1\uffff\2\2\1\uffff\1\2\1\3\3\2\1\uffff"+
            "\1\11\1\2\1\10\1\uffff\2\2",
            "\2\2\16\uffff\1\2\12\uffff\1\2\5\uffff\4\2\13\uffff\1\2\7\uffff"+
            "\1\2\1\uffff\1\13\1\uffff\1\12\12\uffff\1\2\4\uffff\1\2\2\uffff"+
            "\1\2\1\uffff\1\2\5\uffff\2\2\1\uffff\3\2\3\uffff\1\2\5\uffff"+
            "\1\2\10\uffff\1\2\10\uffff\2\2\4\uffff\1\2\1\uffff\1\2\1\uffff"+
            "\1\2",
            "\2\2\2\uffff\13\2\1\uffff\3\2\10\uffff\2\2\4\uffff\4\2\1\uffff"+
            "\1\2\3\uffff\1\2\5\uffff\3\2\3\uffff\3\2\1\uffff\3\2\4\uffff"+
            "\3\2\3\uffff\3\2\2\uffff\1\2\2\uffff\3\2\3\uffff\1\2\1\uffff"+
            "\2\2\1\uffff\5\2\1\uffff\1\2\5\uffff\1\2\10\uffff\1\2\10\uffff"+
            "\2\2\1\uffff\1\2\1\uffff\2\2\1\uffff\1\2\1\3\3\2\1\uffff\1\15"+
            "\1\2\1\14\1\uffff\2\2",
            "\2\2\16\uffff\1\2\12\uffff\1\21\5\uffff\3\2\1\20\13\uffff\1"+
            "\23\7\uffff\1\16\1\uffff\1\2\1\uffff\1\2\12\uffff\1\2\4\uffff"+
            "\1\2\2\uffff\1\2\1\uffff\1\17\5\uffff\2\2\1\uffff\3\2\3\uffff"+
            "\1\2\5\uffff\1\22\10\uffff\1\2\10\uffff\2\2\4\uffff\1\2\1\uffff"+
            "\1\2\1\uffff\1\2",
            "\1\uffff",
            "\2\2\16\uffff\1\2\12\uffff\1\2\5\uffff\4\2\13\uffff\1\2\7\uffff"+
            "\1\2\1\uffff\1\25\1\uffff\1\24\12\uffff\1\2\4\uffff\1\2\2\uffff"+
            "\1\2\1\uffff\1\2\5\uffff\2\2\1\uffff\3\2\3\uffff\1\2\5\uffff"+
            "\1\2\10\uffff\1\2\10\uffff\2\2\4\uffff\1\2\1\uffff\1\2\1\uffff"+
            "\1\2",
            "\2\2\2\uffff\13\2\1\uffff\3\2\10\uffff\2\2\4\uffff\4\2\1\uffff"+
            "\1\2\3\uffff\1\2\5\uffff\3\2\3\uffff\3\2\1\uffff\3\2\4\uffff"+
            "\3\2\3\uffff\3\2\2\uffff\1\2\2\uffff\3\2\3\uffff\1\2\1\uffff"+
            "\2\2\1\uffff\5\2\1\uffff\1\2\5\uffff\1\2\10\uffff\1\2\10\uffff"+
            "\2\2\1\uffff\1\2\1\uffff\2\2\1\uffff\1\2\1\3\3\2\1\uffff\1\27"+
            "\1\2\1\26\1\uffff\2\2",
            "\2\2\16\uffff\1\2\12\uffff\1\33\5\uffff\3\2\1\32\13\uffff\1"+
            "\35\7\uffff\1\30\1\uffff\1\2\1\uffff\1\2\12\uffff\1\2\4\uffff"+
            "\1\2\2\uffff\1\2\1\uffff\1\31\5\uffff\2\2\1\uffff\3\2\3\uffff"+
            "\1\2\5\uffff\1\34\10\uffff\1\2\10\uffff\2\2\4\uffff\1\2\1\uffff"+
            "\1\2\1\uffff\1\2",
            "\1\uffff",
            "\13\2\2\uffff\2\2\27\uffff\1\2\13\uffff\2\2\4\uffff\1\2\4\uffff"+
            "\3\2\4\uffff\2\2\2\uffff\1\2\3\uffff\1\2\6\uffff\1\2\6\uffff"+
            "\1\2\36\uffff\1\2\2\uffff\3\2\1\uffff\1\2\2\uffff\2\2\1\36",
            "\13\2\2\uffff\2\2\27\uffff\1\2\13\uffff\2\2\4\uffff\1\2\4\uffff"+
            "\3\2\4\uffff\2\2\2\uffff\1\2\3\uffff\1\2\6\uffff\1\2\6\uffff"+
            "\1\2\36\uffff\1\2\2\uffff\3\2\1\uffff\1\2\2\uffff\2\2\1\36",
            "\13\2\2\uffff\2\2\27\uffff\1\2\13\uffff\2\2\4\uffff\1\2\4\uffff"+
            "\3\2\4\uffff\2\2\2\uffff\1\2\3\uffff\1\2\6\uffff\1\2\6\uffff"+
            "\1\2\36\uffff\1\2\2\uffff\3\2\1\uffff\1\2\2\uffff\2\2\1\36",
            "\13\2\2\uffff\2\2\27\uffff\1\2\13\uffff\2\2\4\uffff\1\2\4\uffff"+
            "\3\2\4\uffff\2\2\2\uffff\1\2\3\uffff\1\2\6\uffff\1\2\6\uffff"+
            "\1\2\36\uffff\1\2\2\uffff\3\2\1\uffff\1\2\2\uffff\2\2\1\36",
            "\13\2\2\uffff\2\2\27\uffff\1\2\13\uffff\2\2\4\uffff\1\2\4\uffff"+
            "\3\2\4\uffff\2\2\2\uffff\1\2\3\uffff\1\2\6\uffff\1\2\6\uffff"+
            "\1\2\36\uffff\1\2\2\uffff\3\2\1\uffff\1\2\2\uffff\2\2\1\36",
            "\13\2\2\uffff\2\2\27\uffff\1\2\13\uffff\2\2\4\uffff\1\2\4\uffff"+
            "\3\2\4\uffff\2\2\2\uffff\1\2\3\uffff\1\2\6\uffff\1\2\6\uffff"+
            "\1\2\36\uffff\1\2\2\uffff\3\2\1\uffff\1\2\2\uffff\2\2\1\36",
            "\1\uffff",
            "\2\2\2\uffff\13\2\1\uffff\3\2\10\uffff\2\2\4\uffff\4\2\1\uffff"+
            "\1\2\3\uffff\1\2\5\uffff\3\2\3\uffff\3\2\1\uffff\3\2\4\uffff"+
            "\3\2\3\uffff\3\2\2\uffff\1\2\2\uffff\3\2\3\uffff\1\2\1\uffff"+
            "\2\2\1\uffff\5\2\1\uffff\1\2\5\uffff\1\2\10\uffff\1\2\10\uffff"+
            "\2\2\1\uffff\1\2\1\uffff\2\2\1\uffff\1\2\1\3\3\2\1\uffff\1\40"+
            "\1\2\1\37\1\uffff\2\2",
            "\2\2\16\uffff\1\2\12\uffff\1\44\5\uffff\3\2\1\43\13\uffff\1"+
            "\46\7\uffff\1\41\1\uffff\1\2\1\uffff\1\2\12\uffff\1\2\4\uffff"+
            "\1\2\2\uffff\1\2\1\uffff\1\42\5\uffff\2\2\1\uffff\3\2\3\uffff"+
            "\1\2\5\uffff\1\45\10\uffff\1\2\10\uffff\2\2\4\uffff\1\2\1\uffff"+
            "\1\2\1\uffff\1\2",
            "\1\uffff",
            "\13\2\2\uffff\2\2\27\uffff\1\2\13\uffff\2\2\4\uffff\1\2\4\uffff"+
            "\3\2\4\uffff\2\2\2\uffff\1\2\3\uffff\1\2\6\uffff\1\2\6\uffff"+
            "\1\2\36\uffff\1\2\2\uffff\3\2\1\uffff\1\2\2\uffff\2\2\1\47",
            "\13\2\2\uffff\2\2\27\uffff\1\2\13\uffff\2\2\4\uffff\1\2\4\uffff"+
            "\3\2\4\uffff\2\2\2\uffff\1\2\3\uffff\1\2\6\uffff\1\2\6\uffff"+
            "\1\2\36\uffff\1\2\2\uffff\3\2\1\uffff\1\2\2\uffff\2\2\1\47",
            "\13\2\2\uffff\2\2\27\uffff\1\2\13\uffff\2\2\4\uffff\1\2\4\uffff"+
            "\3\2\4\uffff\2\2\2\uffff\1\2\3\uffff\1\2\6\uffff\1\2\6\uffff"+
            "\1\2\36\uffff\1\2\2\uffff\3\2\1\uffff\1\2\2\uffff\2\2\1\47",
            "\13\2\2\uffff\2\2\27\uffff\1\2\13\uffff\2\2\4\uffff\1\2\4\uffff"+
            "\3\2\4\uffff\2\2\2\uffff\1\2\3\uffff\1\2\6\uffff\1\2\6\uffff"+
            "\1\2\36\uffff\1\2\2\uffff\3\2\1\uffff\1\2\2\uffff\2\2\1\47",
            "\13\2\2\uffff\2\2\27\uffff\1\2\13\uffff\2\2\4\uffff\1\2\4\uffff"+
            "\3\2\4\uffff\2\2\2\uffff\1\2\3\uffff\1\2\6\uffff\1\2\6\uffff"+
            "\1\2\36\uffff\1\2\2\uffff\3\2\1\uffff\1\2\2\uffff\2\2\1\47",
            "\13\2\2\uffff\2\2\27\uffff\1\2\13\uffff\2\2\4\uffff\1\2\4\uffff"+
            "\3\2\4\uffff\2\2\2\uffff\1\2\3\uffff\1\2\6\uffff\1\2\6\uffff"+
            "\1\2\36\uffff\1\2\2\uffff\3\2\1\uffff\1\2\2\uffff\2\2\1\47",
            "\2\2\2\uffff\13\2\1\uffff\3\2\10\uffff\2\2\4\uffff\4\2\1\uffff"+
            "\1\2\3\uffff\1\2\5\uffff\3\2\3\uffff\3\2\1\uffff\3\2\4\uffff"+
            "\3\2\3\uffff\3\2\2\uffff\1\2\2\uffff\3\2\3\uffff\1\2\1\uffff"+
            "\2\2\1\uffff\5\2\1\uffff\1\2\5\uffff\1\2\10\uffff\1\2\10\uffff"+
            "\2\2\1\uffff\1\2\1\uffff\2\2\1\uffff\1\2\1\uffff\1\2\1\uffff"+
            "\1\2\1\uffff\1\50\1\2\1\10\1\uffff\2\2",
            "\1\uffff",
            "\1\uffff",
            "\13\2\2\uffff\2\2\27\uffff\1\2\13\uffff\2\2\4\uffff\1\2\4\uffff"+
            "\3\2\4\uffff\2\2\2\uffff\1\2\3\uffff\1\2\6\uffff\1\2\6\uffff"+
            "\1\2\36\uffff\1\2\2\uffff\3\2\1\uffff\1\2\2\uffff\2\2\1\51",
            "\13\2\2\uffff\2\2\27\uffff\1\2\13\uffff\2\2\4\uffff\1\2\4\uffff"+
            "\3\2\4\uffff\2\2\2\uffff\1\2\3\uffff\1\2\6\uffff\1\2\6\uffff"+
            "\1\2\36\uffff\1\2\2\uffff\3\2\1\uffff\1\2\2\uffff\2\2\1\51",
            "\13\2\2\uffff\2\2\27\uffff\1\2\13\uffff\2\2\4\uffff\1\2\4\uffff"+
            "\3\2\4\uffff\2\2\2\uffff\1\2\3\uffff\1\2\6\uffff\1\2\6\uffff"+
            "\1\2\36\uffff\1\2\2\uffff\3\2\1\uffff\1\2\2\uffff\2\2\1\51",
            "\13\2\2\uffff\2\2\27\uffff\1\2\13\uffff\2\2\4\uffff\1\2\4\uffff"+
            "\3\2\4\uffff\2\2\2\uffff\1\2\3\uffff\1\2\6\uffff\1\2\6\uffff"+
            "\1\2\36\uffff\1\2\2\uffff\3\2\1\uffff\1\2\2\uffff\2\2\1\51",
            "\13\2\2\uffff\2\2\27\uffff\1\2\13\uffff\2\2\4\uffff\1\2\4\uffff"+
            "\3\2\4\uffff\2\2\2\uffff\1\2\3\uffff\1\2\6\uffff\1\2\6\uffff"+
            "\1\2\36\uffff\1\2\2\uffff\3\2\1\uffff\1\2\2\uffff\2\2\1\51",
            "\13\2\2\uffff\2\2\27\uffff\1\2\13\uffff\2\2\4\uffff\1\2\4\uffff"+
            "\3\2\4\uffff\2\2\2\uffff\1\2\3\uffff\1\2\6\uffff\1\2\6\uffff"+
            "\1\2\36\uffff\1\2\2\uffff\3\2\1\uffff\1\2\2\uffff\2\2\1\51",
            "\2\2\2\uffff\13\2\1\uffff\3\2\10\uffff\2\2\4\uffff\4\2\1\uffff"+
            "\1\2\3\uffff\1\2\5\uffff\3\2\3\uffff\3\2\1\uffff\3\2\4\uffff"+
            "\3\2\3\uffff\3\2\2\uffff\1\2\2\uffff\3\2\3\uffff\1\2\1\uffff"+
            "\2\2\1\uffff\5\2\1\uffff\1\2\5\uffff\1\2\10\uffff\1\2\10\uffff"+
            "\2\2\1\uffff\1\2\1\uffff\2\2\1\uffff\1\2\1\uffff\1\2\1\uffff"+
            "\1\2\1\uffff\1\52\1\2\1\14\1\uffff\2\2",
            "\1\uffff",
            "\2\2\2\uffff\13\2\1\uffff\3\2\10\uffff\2\2\4\uffff\4\2\1\uffff"+
            "\1\2\3\uffff\1\2\5\uffff\3\2\3\uffff\3\2\1\uffff\3\2\4\uffff"+
            "\3\2\3\uffff\3\2\2\uffff\1\2\2\uffff\3\2\3\uffff\1\2\1\uffff"+
            "\2\2\1\uffff\5\2\1\uffff\1\2\5\uffff\1\2\10\uffff\1\2\10\uffff"+
            "\2\2\1\uffff\1\2\1\uffff\2\2\1\uffff\1\2\1\uffff\1\2\1\uffff"+
            "\1\2\1\uffff\1\53\1\2\1\26\1\uffff\2\2",
            "\1\uffff",
            "\1\uffff"
    };

    static final short[] DFA13_eot = DFA.unpackEncodedString(DFA13_eotS);
    static final short[] DFA13_eof = DFA.unpackEncodedString(DFA13_eofS);
    static final char[] DFA13_min = DFA.unpackEncodedStringToUnsignedChars(DFA13_minS);
    static final char[] DFA13_max = DFA.unpackEncodedStringToUnsignedChars(DFA13_maxS);
    static final short[] DFA13_accept = DFA.unpackEncodedString(DFA13_acceptS);
    static final short[] DFA13_special = DFA.unpackEncodedString(DFA13_specialS);
    static final short[][] DFA13_transition;

    static {
        int numStates = DFA13_transitionS.length;
        DFA13_transition = new short[numStates][];
        for (int i=0; i<numStates; i++) {
            DFA13_transition[i] = DFA.unpackEncodedString(DFA13_transitionS[i]);
        }
    }

    class DFA13 extends DFA {

        public DFA13(BaseRecognizer recognizer) {
            this.recognizer = recognizer;
            this.decisionNumber = 13;
            this.eot = DFA13_eot;
            this.eof = DFA13_eof;
            this.min = DFA13_min;
            this.max = DFA13_max;
            this.accept = DFA13_accept;
            this.special = DFA13_special;
            this.transition = DFA13_transition;
        }
        public String getDescription() {
            return "()* loopback of 106:4: ( var_declaration )*";
        }
        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
            TokenStream input = (TokenStream)_input;
        	int _s = s;
            switch ( s ) {
                    case 0 : 
                        int LA13_31 = input.LA(1);

                         
                        int index13_31 = input.index();
                        input.rewind();

                        s = -1;
                        if ( ((((isTypeName(input.LT(1).getText()))&&(isTypeName(input.LT(1).getText())))&&synpred17_SCPAR())) ) {s = 3;}

                        else if ( (true) ) {s = 2;}

                         
                        input.seek(index13_31);

                        if ( s>=0 ) return s;
                        break;

                    case 1 : 
                        int LA13_20 = input.LA(1);

                         
                        int index13_20 = input.index();
                        input.rewind();

                        s = -1;
                        if ( ((((isTypeName(input.LT(1).getText()))&&(isTypeName(input.LT(1).getText())))&&synpred17_SCPAR())) ) {s = 3;}

                        else if ( (true) ) {s = 2;}

                         
                        input.seek(index13_20);

                        if ( s>=0 ) return s;
                        break;

                    case 2 : 
                        int LA13_43 = input.LA(1);

                         
                        int index13_43 = input.index();
                        input.rewind();

                        s = -1;
                        if ( ((((isTypeName(input.LT(1).getText()))&&(isTypeName(input.LT(1).getText())))&&synpred17_SCPAR())) ) {s = 3;}

                        else if ( (true) ) {s = 2;}

                         
                        input.seek(index13_43);

                        if ( s>=0 ) return s;
                        break;

                    case 3 : 
                        int LA13_42 = input.LA(1);

                         
                        int index13_42 = input.index();
                        input.rewind();

                        s = -1;
                        if ( ((((isTypeName(input.LT(1).getText()))&&(isTypeName(input.LT(1).getText())))&&synpred17_SCPAR())) ) {s = 3;}

                        else if ( (true) ) {s = 2;}

                         
                        input.seek(index13_42);

                        if ( s>=0 ) return s;
                        break;

                    case 4 : 
                        int LA13_40 = input.LA(1);

                         
                        int index13_40 = input.index();
                        input.rewind();

                        s = -1;
                        if ( ((((isTypeName(input.LT(1).getText()))&&(isTypeName(input.LT(1).getText())))&&synpred17_SCPAR())) ) {s = 3;}

                        else if ( (true) ) {s = 2;}

                         
                        input.seek(index13_40);

                        if ( s>=0 ) return s;
                        break;

                    case 5 : 
                        int LA13_32 = input.LA(1);

                         
                        int index13_32 = input.index();
                        input.rewind();

                        s = -1;
                        if ( ((((isTypeName(input.LT(1).getText()))&&(isTypeName(input.LT(1).getText())))&&synpred17_SCPAR())) ) {s = 3;}

                        else if ( (true) ) {s = 2;}

                         
                        input.seek(index13_32);

                        if ( s>=0 ) return s;
                        break;

                    case 6 : 
                        int LA13_9 = input.LA(1);

                         
                        int index13_9 = input.index();
                        input.rewind();

                        s = -1;
                        if ( ((((isTypeName(input.LT(1).getText()))&&(isTypeName(input.LT(1).getText())))&&synpred17_SCPAR())) ) {s = 3;}

                        else if ( (true) ) {s = 2;}

                         
                        input.seek(index13_9);

                        if ( s>=0 ) return s;
                        break;

                    case 7 : 
                        int LA13_13 = input.LA(1);

                         
                        int index13_13 = input.index();
                        input.rewind();

                        s = -1;
                        if ( ((((isTypeName(input.LT(1).getText()))&&(isTypeName(input.LT(1).getText())))&&synpred17_SCPAR())) ) {s = 3;}

                        else if ( (true) ) {s = 2;}

                         
                        input.seek(index13_13);

                        if ( s>=0 ) return s;
                        break;

                    case 8 : 
                        int LA13_23 = input.LA(1);

                         
                        int index13_23 = input.index();
                        input.rewind();

                        s = -1;
                        if ( ((((isTypeName(input.LT(1).getText()))&&(isTypeName(input.LT(1).getText())))&&synpred17_SCPAR())) ) {s = 3;}

                        else if ( (true) ) {s = 2;}

                         
                        input.seek(index13_23);

                        if ( s>=0 ) return s;
                        break;
            }
            if (state.backtracking>0) {state.failed=true; return -1;}

            NoViableAltException nvae =
                new NoViableAltException(getDescription(), 13, _s, input);
            error(nvae);
            throw nvae;
        }

    }
    static final String DFA42_eotS =
        "\123\uffff";
    static final String DFA42_eofS =
        "\10\uffff\1\30\112\uffff";
    static final String DFA42_minS =
        "\1\5\7\uffff\1\4\15\uffff\1\0\74\uffff";
    static final String DFA42_maxS =
        "\1\u0082\7\uffff\1\u008f\15\uffff\1\0\74\uffff";
    static final String DFA42_acceptS =
        "\1\uffff\1\1\5\uffff\1\2\1\uffff\1\3\15\uffff\1\4\1\5\72\uffff";
    static final String DFA42_specialS =
        "\26\uffff\1\0\74\uffff}>";
    static final String[] DFA42_transitionS = {
            "\1\11\31\uffff\1\1\5\uffff\3\11\1\1\13\uffff\1\1\7\uffff\1\1"+
            "\1\uffff\1\10\14\uffff\1\11\11\uffff\1\1\6\uffff\1\11\1\uffff"+
            "\3\11\3\uffff\1\11\5\uffff\1\1\10\uffff\1\11\10\uffff\2\11\4"+
            "\uffff\1\7",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "\3\30\1\uffff\13\30\1\uffff\3\30\10\uffff\3\30\3\uffff\4\30"+
            "\1\uffff\1\30\1\uffff\1\30\1\uffff\1\30\5\uffff\3\30\3\uffff"+
            "\3\30\1\uffff\3\30\4\uffff\3\30\3\uffff\3\30\2\uffff\1\30\2"+
            "\uffff\3\30\3\uffff\4\30\1\uffff\5\30\1\uffff\1\30\5\uffff\1"+
            "\30\3\uffff\1\30\4\uffff\1\30\10\uffff\2\30\1\uffff\1\30\1\uffff"+
            "\1\30\1\26\4\30\1\27\10\30",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "\1\uffff",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
    };

    static final short[] DFA42_eot = DFA.unpackEncodedString(DFA42_eotS);
    static final short[] DFA42_eof = DFA.unpackEncodedString(DFA42_eofS);
    static final char[] DFA42_min = DFA.unpackEncodedStringToUnsignedChars(DFA42_minS);
    static final char[] DFA42_max = DFA.unpackEncodedStringToUnsignedChars(DFA42_maxS);
    static final short[] DFA42_accept = DFA.unpackEncodedString(DFA42_acceptS);
    static final short[] DFA42_special = DFA.unpackEncodedString(DFA42_specialS);
    static final short[][] DFA42_transition;

    static {
        int numStates = DFA42_transitionS.length;
        DFA42_transition = new short[numStates][];
        for (int i=0; i<numStates; i++) {
            DFA42_transition[i] = DFA.unpackEncodedString(DFA42_transitionS[i]);
        }
    }

    class DFA42 extends DFA {

        public DFA42(BaseRecognizer recognizer) {
            this.recognizer = recognizer;
            this.decisionNumber = 42;
            this.eot = DFA42_eot;
            this.eof = DFA42_eof;
            this.min = DFA42_min;
            this.max = DFA42_max;
            this.accept = DFA42_accept;
            this.special = DFA42_special;
            this.transition = DFA42_transition;
        }
        public String getDescription() {
            return "281:1: primary_expression options {k=2; } : ( constant | '(' expression ')' | function_call | IDENTIFIER '.' c_function_call -> ^( IDENTIFIER c_function_call ) | IDENTIFIER -> IDENTIFIER );";
        }
        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
            TokenStream input = (TokenStream)_input;
        	int _s = s;
            switch ( s ) {
                    case 0 : 
                        int LA42_22 = input.LA(1);

                         
                        int index42_22 = input.index();
                        input.rewind();

                        s = -1;
                        if ( (synpred94_SCPAR()) ) {s = 9;}

                        else if ( (true) ) {s = 24;}

                         
                        input.seek(index42_22);

                        if ( s>=0 ) return s;
                        break;
            }
            if (state.backtracking>0) {state.failed=true; return -1;}

            NoViableAltException nvae =
                new NoViableAltException(getDescription(), 42, _s, input);
            error(nvae);
            throw nvae;
        }

    }
    static final String DFA43_eotS =
        "\75\uffff";
    static final String DFA43_eofS =
        "\1\1\74\uffff";
    static final String DFA43_minS =
        "\1\4\30\uffff\1\0\42\uffff\1\0";
    static final String DFA43_maxS =
        "\1\u008f\30\uffff\1\0\42\uffff\1\0";
    static final String DFA43_acceptS =
        "\1\uffff\1\2\71\uffff\1\1\1\uffff";
    static final String DFA43_specialS =
        "\31\uffff\1\0\42\uffff\1\1}>";
    static final String[] DFA43_transitionS = {
            "\3\1\1\uffff\13\1\1\uffff\3\1\10\uffff\3\1\3\uffff\4\1\1\uffff"+
            "\1\1\1\uffff\1\1\1\uffff\1\1\5\uffff\3\1\3\uffff\3\1\1\uffff"+
            "\3\1\4\uffff\3\1\3\uffff\3\1\2\uffff\1\1\2\uffff\3\1\3\uffff"+
            "\4\1\1\uffff\5\1\1\uffff\1\1\5\uffff\1\1\3\uffff\1\1\4\uffff"+
            "\1\1\10\uffff\2\1\1\uffff\1\1\1\uffff\3\1\1\31\1\1\1\74\1\uffff"+
            "\4\1\1\73\3\1",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "\1\uffff",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "\1\uffff"
    };

    static final short[] DFA43_eot = DFA.unpackEncodedString(DFA43_eotS);
    static final short[] DFA43_eof = DFA.unpackEncodedString(DFA43_eofS);
    static final char[] DFA43_min = DFA.unpackEncodedStringToUnsignedChars(DFA43_minS);
    static final char[] DFA43_max = DFA.unpackEncodedStringToUnsignedChars(DFA43_maxS);
    static final short[] DFA43_accept = DFA.unpackEncodedString(DFA43_acceptS);
    static final short[] DFA43_special = DFA.unpackEncodedString(DFA43_specialS);
    static final short[][] DFA43_transition;

    static {
        int numStates = DFA43_transitionS.length;
        DFA43_transition = new short[numStates][];
        for (int i=0; i<numStates; i++) {
            DFA43_transition[i] = DFA.unpackEncodedString(DFA43_transitionS[i]);
        }
    }

    class DFA43 extends DFA {

        public DFA43(BaseRecognizer recognizer) {
            this.recognizer = recognizer;
            this.decisionNumber = 43;
            this.eot = DFA43_eot;
            this.eof = DFA43_eof;
            this.min = DFA43_min;
            this.max = DFA43_max;
            this.accept = DFA43_accept;
            this.special = DFA43_special;
            this.transition = DFA43_transition;
        }
        public String getDescription() {
            return "()* loopback of 294:23: ( postfix_expression )*";
        }
        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
            TokenStream input = (TokenStream)_input;
        	int _s = s;
            switch ( s ) {
                    case 0 : 
                        int LA43_25 = input.LA(1);

                         
                        int index43_25 = input.index();
                        input.rewind();

                        s = -1;
                        if ( (synpred99_SCPAR()) ) {s = 59;}

                        else if ( (true) ) {s = 1;}

                         
                        input.seek(index43_25);

                        if ( s>=0 ) return s;
                        break;

                    case 1 : 
                        int LA43_60 = input.LA(1);

                         
                        int index43_60 = input.index();
                        input.rewind();

                        s = -1;
                        if ( (synpred99_SCPAR()) ) {s = 59;}

                        else if ( (true) ) {s = 1;}

                         
                        input.seek(index43_60);

                        if ( s>=0 ) return s;
                        break;
            }
            if (state.backtracking>0) {state.failed=true; return -1;}

            NoViableAltException nvae =
                new NoViableAltException(getDescription(), 43, _s, input);
            error(nvae);
            throw nvae;
        }

    }
 

    public static final BitSet FOLLOW_external_declaration_in_translation_unit138 = new BitSet(new long[]{0x4009A80860080002L,0x0E122AE82002C00CL});
    public static final BitSet FOLLOW_var_declaration_in_external_declaration162 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_task_declaration_in_external_declaration167 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_c_function_in_external_declaration172 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_main_function_in_external_declaration177 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_monitor_block_in_external_declaration182 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_enum_declaration_in_external_declaration187 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_MONITOR_in_monitor_block199 = new BitSet(new long[]{0x4000000000000000L});
    public static final BitSet FOLLOW_IDENTIFIER_in_monitor_block201 = new BitSet(new long[]{0x4009880860080000L,0x0E120AE82000400CL,0x0000000000004000L});
    public static final BitSet FOLLOW_var_declaration_in_monitor_block203 = new BitSet(new long[]{0x4009880860080000L,0x0E120AE82000400CL,0x0000000000004000L});
    public static final BitSet FOLLOW_142_in_monitor_block206 = new BitSet(new long[]{0x4009880860080000L,0x0E120AC82000400CL});
    public static final BitSet FOLLOW_c_function_in_monitor_block208 = new BitSet(new long[]{0x4009880860080000L,0x0E120AC82000400CL,0x000000000000C000L});
    public static final BitSet FOLLOW_142_in_monitor_block212 = new BitSet(new long[]{0xD07005E180100030L,0xB0080413DA290801L,0x0000000000004454L});
    public static final BitSet FOLLOW_statements_in_monitor_block214 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000008000L});
    public static final BitSet FOLLOW_143_in_monitor_block216 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000008000L});
    public static final BitSet FOLLOW_143_in_monitor_block220 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_type_declaration_in_c_function266 = new BitSet(new long[]{0x4000000000000000L});
    public static final BitSet FOLLOW_IDENTIFIER_in_c_function268 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000004L});
    public static final BitSet FOLLOW_130_in_c_function270 = new BitSet(new long[]{0x4009880860080000L,0x0E120AC82000400CL,0x0000000000000008L});
    public static final BitSet FOLLOW_parameter_declarations_in_c_function272 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000008L});
    public static final BitSet FOLLOW_131_in_c_function275 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000004400L});
    public static final BitSet FOLLOW_138_in_c_function278 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_142_in_c_function282 = new BitSet(new long[]{0xD0798DE9E0180030L,0xBE1A0EFBFA29480DL,0x000000000000C454L});
    public static final BitSet FOLLOW_function_body_in_c_function284 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000008000L});
    public static final BitSet FOLLOW_143_in_c_function286 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_VOID_in_main_function331 = new BitSet(new long[]{0x0000000000000000L,0x0000000000008000L});
    public static final BitSet FOLLOW_MAIN_in_main_function334 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000004L});
    public static final BitSet FOLLOW_130_in_main_function336 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000008L});
    public static final BitSet FOLLOW_131_in_main_function338 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000004000L});
    public static final BitSet FOLLOW_142_in_main_function340 = new BitSet(new long[]{0xD0798DE9E0180030L,0xBE1A0EFBFA29480DL,0x000000000000C454L});
    public static final BitSet FOLLOW_function_body_in_main_function342 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000008000L});
    public static final BitSet FOLLOW_143_in_main_function344 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_task_spec_in_task_declaration372 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_task_body_in_task_declaration377 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_TASK_in_task_spec389 = new BitSet(new long[]{0x0000000000000000L,0x0000010000000000L});
    public static final BitSet FOLLOW_SPEC_in_task_spec391 = new BitSet(new long[]{0x4000000000000000L});
    public static final BitSet FOLLOW_IDENTIFIER_in_task_spec393 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000004L});
    public static final BitSet FOLLOW_130_in_task_spec395 = new BitSet(new long[]{0x4009880860080000L,0x0E120AC82000400CL,0x0000000000000008L});
    public static final BitSet FOLLOW_parameter_declarations_in_task_spec397 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000008L});
    public static final BitSet FOLLOW_131_in_task_spec400 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000400L});
    public static final BitSet FOLLOW_138_in_task_spec402 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_TASK_in_task_body433 = new BitSet(new long[]{0x0000000002000000L});
    public static final BitSet FOLLOW_BODY_in_task_body435 = new BitSet(new long[]{0x4000000000000000L});
    public static final BitSet FOLLOW_IDENTIFIER_in_task_body437 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000004L});
    public static final BitSet FOLLOW_130_in_task_body439 = new BitSet(new long[]{0x4009880860080000L,0x0E120AC82000400CL,0x0000000000000008L});
    public static final BitSet FOLLOW_parameter_declarations_in_task_body441 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000008L});
    public static final BitSet FOLLOW_131_in_task_body444 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000004000L});
    public static final BitSet FOLLOW_142_in_task_body446 = new BitSet(new long[]{0xD0798DE9E0180030L,0xBE1A0EFBFA29480DL,0x000000000000C454L});
    public static final BitSet FOLLOW_function_body_in_task_body448 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000008000L});
    public static final BitSet FOLLOW_143_in_task_body450 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_parameter_declaration_in_parameter_declarations487 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000000L,0x0000000000000020L});
    public static final BitSet FOLLOW_133_in_parameter_declarations491 = new BitSet(new long[]{0x4009880860080000L,0x0E120AC82000400CL});
    public static final BitSet FOLLOW_parameter_declaration_in_parameter_declarations493 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000000L,0x0000000000000020L});
    public static final BitSet FOLLOW_c_var_declaration_in_parameter_declaration518 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_var_declaration_in_function_body538 = new BitSet(new long[]{0xD0798DE9E0180032L,0xBE1A0EFBFA29480DL,0x0000000000004454L});
    public static final BitSet FOLLOW_statements_in_function_body541 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_statement_in_statements573 = new BitSet(new long[]{0xD07005E180100032L,0xB0080413DA290801L,0x0000000000004454L});
    public static final BitSet FOLLOW_function_call_in_statement586 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_parallel_block_in_statement599 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_assignment_expression_in_statement604 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_if_statement_in_statement610 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_for_statement_in_statement615 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_forall_statement_in_statement620 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_142_in_statement625 = new BitSet(new long[]{0xD07005E180100030L,0xB0080413DA290801L,0x0000000000004454L});
    public static final BitSet FOLLOW_statements_in_statement627 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000008000L});
    public static final BitSet FOLLOW_143_in_statement629 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_return_statement_in_statement634 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_loop_statement_in_statement639 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_138_in_statement644 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_DO_in_loop_statement656 = new BitSet(new long[]{0xD07005E180100030L,0xB0080413DA290801L,0x0000000000004454L});
    public static final BitSet FOLLOW_statement_in_loop_statement658 = new BitSet(new long[]{0x0000000000000000L,0x8000000000000000L});
    public static final BitSet FOLLOW_WHILE_in_loop_statement660 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000004L});
    public static final BitSet FOLLOW_130_in_loop_statement662 = new BitSet(new long[]{0x501001E080100030L,0x30080411D8290801L,0x0000000000000054L});
    public static final BitSet FOLLOW_expression_in_loop_statement664 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000008L});
    public static final BitSet FOLLOW_131_in_loop_statement666 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_WHILE_in_loop_statement671 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000004L});
    public static final BitSet FOLLOW_130_in_loop_statement673 = new BitSet(new long[]{0x501001E080100030L,0x30080411D8290801L,0x0000000000000054L});
    public static final BitSet FOLLOW_assignment_expression_in_loop_statement675 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000008L});
    public static final BitSet FOLLOW_131_in_loop_statement677 = new BitSet(new long[]{0xD07005E180100030L,0xB0080413DA290801L,0x0000000000004454L});
    public static final BitSet FOLLOW_statement_in_loop_statement679 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_RETURN_in_return_statement693 = new BitSet(new long[]{0x501001E080100032L,0x30080411D8290801L,0x0000000000000054L});
    public static final BitSet FOLLOW_expression_in_return_statement695 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_COBEGIN_in_parallel_block709 = new BitSet(new long[]{0xD07005E180100030L,0xB0080413DA290801L,0x0000000000004454L});
    public static final BitSet FOLLOW_statements_in_parallel_block711 = new BitSet(new long[]{0x0000000000000040L});
    public static final BitSet FOLLOW_ALSO_in_parallel_block714 = new BitSet(new long[]{0xD07005E180100030L,0xB0080413DA290801L,0x0000000000004454L});
    public static final BitSet FOLLOW_statements_in_parallel_block716 = new BitSet(new long[]{0x0000000200000040L});
    public static final BitSet FOLLOW_COEND_in_parallel_block720 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_PARBEGIN_in_parallel_block747 = new BitSet(new long[]{0xD07005E180100030L,0xB0080413DA290801L,0x0000000000004454L});
    public static final BitSet FOLLOW_statements_in_parallel_block749 = new BitSet(new long[]{0x0000000000000040L});
    public static final BitSet FOLLOW_ALSO_in_parallel_block752 = new BitSet(new long[]{0xD07005E180100030L,0xB0080413DA290801L,0x0000000000004454L});
    public static final BitSet FOLLOW_statements_in_parallel_block754 = new BitSet(new long[]{0x0000000000000040L,0x0000000004000000L});
    public static final BitSet FOLLOW_PAREND_in_parallel_block758 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_FORALL_in_forall_statement792 = new BitSet(new long[]{0x501001E080100030L,0x30080411D8290801L,0x0000000000000054L});
    public static final BitSet FOLLOW_assignment_expression_in_forall_statement794 = new BitSet(new long[]{0x0000000000000000L,0x0000400000000000L});
    public static final BitSet FOLLOW_TO_in_forall_statement796 = new BitSet(new long[]{0x501001E080100030L,0x30080411D8290801L,0x0000000000000054L});
    public static final BitSet FOLLOW_expression_in_forall_statement798 = new BitSet(new long[]{0xD07005E180100030L,0xB0080413DA290801L,0x0000000000004454L});
    public static final BitSet FOLLOW_statement_in_forall_statement800 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_IF_in_if_statement831 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000004L});
    public static final BitSet FOLLOW_130_in_if_statement833 = new BitSet(new long[]{0x501001E080100030L,0x30080411D8290801L,0x0000000000000054L});
    public static final BitSet FOLLOW_expression_in_if_statement835 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000008L});
    public static final BitSet FOLLOW_131_in_if_statement837 = new BitSet(new long[]{0xD07005E180100030L,0xB0080413DA290801L,0x0000000000004454L});
    public static final BitSet FOLLOW_statement_in_if_statement839 = new BitSet(new long[]{0x0000100000000002L});
    public static final BitSet FOLLOW_ELSE_in_if_statement842 = new BitSet(new long[]{0xD07005E180100030L,0xB0080413DA290801L,0x0000000000004454L});
    public static final BitSet FOLLOW_statement_in_if_statement844 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_FOR_in_for_statement858 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000004L});
    public static final BitSet FOLLOW_130_in_for_statement860 = new BitSet(new long[]{0x501001E080100030L,0x30080411D8290801L,0x0000000000000454L});
    public static final BitSet FOLLOW_expression_in_for_statement862 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000400L});
    public static final BitSet FOLLOW_138_in_for_statement865 = new BitSet(new long[]{0x501001E080100030L,0x30080411D8290801L,0x0000000000000454L});
    public static final BitSet FOLLOW_expression_in_for_statement867 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000400L});
    public static final BitSet FOLLOW_138_in_for_statement870 = new BitSet(new long[]{0x501001E080100030L,0x30080411D8290801L,0x000000000000005CL});
    public static final BitSet FOLLOW_expression_in_for_statement872 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000008L});
    public static final BitSet FOLLOW_131_in_for_statement875 = new BitSet(new long[]{0xD07005E180100030L,0xB0080413DA290801L,0x0000000000004454L});
    public static final BitSet FOLLOW_statement_in_for_statement877 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_c_function_call_in_function_call891 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_cpar_function_call_in_function_call896 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_semaphore_function_call_in_cpar_function_call908 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_event_function_call_in_cpar_function_call913 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_proc_function_call_in_cpar_function_call918 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ALLOC_PROC_in_proc_function_call930 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000004L});
    public static final BitSet FOLLOW_130_in_proc_function_call932 = new BitSet(new long[]{0x1010010080000000L,0x0000040000200000L});
    public static final BitSet FOLLOW_constant_in_proc_function_call934 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000008L});
    public static final BitSet FOLLOW_131_in_proc_function_call936 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_CREATE_in_proc_function_call952 = new BitSet(new long[]{0x501001E080100030L,0x30080411D8290801L,0x0000000000000054L});
    public static final BitSet FOLLOW_assignment_expression_in_proc_function_call954 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000020L});
    public static final BitSet FOLLOW_133_in_proc_function_call956 = new BitSet(new long[]{0x400000E000000020L,0x30080011D0000800L});
    public static final BitSet FOLLOW_function_call_in_proc_function_call958 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_WAIT_ALL_in_proc_function_call976 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000004L});
    public static final BitSet FOLLOW_130_in_proc_function_call978 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000008L});
    public static final BitSet FOLLOW_131_in_proc_function_call980 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_event_type_in_event_function_call1004 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000004L});
    public static final BitSet FOLLOW_130_in_event_function_call1006 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_ADDRESSOF_in_event_function_call1008 = new BitSet(new long[]{0x501001E080100030L,0x30080411D8290801L,0x0000000000000054L});
    public static final BitSet FOLLOW_unary_expression_in_event_function_call1010 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000008L});
    public static final BitSet FOLLOW_131_in_event_function_call1012 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_CREATE_EV_in_event_type1032 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_SET_EV_in_event_type1044 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_REM_EV_in_event_type1056 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_RES_EV_in_event_type1068 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_WAIT_EV_in_event_type1080 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_READ_EV_in_event_type1092 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_semaphore_type_in_semaphore_function_call1111 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000004L});
    public static final BitSet FOLLOW_130_in_semaphore_function_call1113 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_ADDRESSOF_in_semaphore_function_call1115 = new BitSet(new long[]{0x4000000000000000L});
    public static final BitSet FOLLOW_IDENTIFIER_in_semaphore_function_call1117 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000028L});
    public static final BitSet FOLLOW_133_in_semaphore_function_call1120 = new BitSet(new long[]{0x501001E080100030L,0x30080411D8290801L,0x0000000000000054L});
    public static final BitSet FOLLOW_unary_expression_in_semaphore_function_call1122 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000008L});
    public static final BitSet FOLLOW_131_in_semaphore_function_call1126 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_CREATE_SEM_in_semaphore_type1149 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_REMOVE_SEM_in_semaphore_type1157 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_LOCK_in_semaphore_type1165 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_UNLOCK_in_semaphore_type1173 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_IDENTIFIER_in_c_function_call1187 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000004L});
    public static final BitSet FOLLOW_130_in_c_function_call1189 = new BitSet(new long[]{0x501001E080100030L,0x30080411D8290801L,0x000000000000005CL});
    public static final BitSet FOLLOW_argument_list_in_c_function_call1191 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000008L});
    public static final BitSet FOLLOW_131_in_c_function_call1194 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_argument_in_argument_list1219 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000000L,0x0000000000000020L});
    public static final BitSet FOLLOW_133_in_argument_list1222 = new BitSet(new long[]{0x501001E080100030L,0x30080411D8290801L,0x0000000000000054L});
    public static final BitSet FOLLOW_argument_in_argument_list1224 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000000L,0x0000000000000020L});
    public static final BitSet FOLLOW_expression_in_argument1243 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_assignment_expression_in_expression1263 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000000L,0x0000000000000020L});
    public static final BitSet FOLLOW_133_in_expression1266 = new BitSet(new long[]{0x501001E080100030L,0x30080411D8290801L,0x0000000000000054L});
    public static final BitSet FOLLOW_assignment_expression_in_expression1268 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000000L,0x0000000000000020L});
    public static final BitSet FOLLOW_lvalue_in_assignment_expression1286 = new BitSet(new long[]{0x000000000007FF00L});
    public static final BitSet FOLLOW_assignment_operator_in_assignment_expression1288 = new BitSet(new long[]{0x501001E080100030L,0x30080411D8290801L,0x0000000000000054L});
    public static final BitSet FOLLOW_assignment_expression_in_assignment_expression1290 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_conditional_expression_in_assignment_expression1305 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_binary_expression_in_conditional_expression1316 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000000L,0x0000000000000800L});
    public static final BitSet FOLLOW_139_in_conditional_expression1319 = new BitSet(new long[]{0x501001E080100030L,0x30080411D8290801L,0x0000000000000054L});
    public static final BitSet FOLLOW_expression_in_conditional_expression1321 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000200L});
    public static final BitSet FOLLOW_137_in_conditional_expression1323 = new BitSet(new long[]{0x501001E080100030L,0x30080411D8290801L,0x0000000000000054L});
    public static final BitSet FOLLOW_conditional_expression_in_conditional_expression1325 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_cast_expression_in_binary_expression1350 = new BitSet(new long[]{0x0C00400000600002L,0x00000004081130E1L,0x0000000000000102L});
    public static final BitSet FOLLOW_operator_in_binary_expression1353 = new BitSet(new long[]{0x501001E080100030L,0x30080411D8290801L,0x0000000000000054L});
    public static final BitSet FOLLOW_cast_expression_in_binary_expression1355 = new BitSet(new long[]{0x0C00400000600002L,0x00000004081130E1L,0x0000000000000102L});
    public static final BitSet FOLLOW_130_in_cast_expression1467 = new BitSet(new long[]{0x4000000000000000L,0x0000000000000001L});
    public static final BitSet FOLLOW_IDENTIFIER_in_cast_expression1470 = new BitSet(new long[]{0x4000000000000000L,0x0000000000000001L,0x0000000000000008L});
    public static final BitSet FOLLOW_INDIRECTION_in_cast_expression1472 = new BitSet(new long[]{0x4000000000000000L,0x0000000000000001L,0x0000000000000008L});
    public static final BitSet FOLLOW_131_in_cast_expression1476 = new BitSet(new long[]{0x501001E080100030L,0x30080411D8290801L,0x0000000000000054L});
    public static final BitSet FOLLOW_cast_expression_in_cast_expression1478 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_unary_expression_in_cast_expression1487 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ASGN_EQUAL_in_assignment_operator1498 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ASGN_TIMES_in_assignment_operator1507 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ASGN_DIVIDE_in_assignment_operator1516 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ASGN_MOD_in_assignment_operator1525 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ASGN_PLUS_in_assignment_operator1534 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ASGN_MINUS_in_assignment_operator1543 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ASGN_LSHIFT_in_assignment_operator1552 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ASGN_RSHIFT_in_assignment_operator1561 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ASGN_BITWISE_AND_in_assignment_operator1570 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ASGN_BITWISE_XOR_in_assignment_operator1579 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ASGN_BITWISE_OR_in_assignment_operator1588 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_unary_expression_in_lvalue1606 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_constant_in_constant_expression1619 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_HEX_LITERAL_in_constant1632 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_OCTAL_LITERAL_in_constant1642 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_DECIMAL_LITERAL_in_constant1652 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_CHARACTER_LITERAL_in_constant1662 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_STRING_LITERAL_in_constant1671 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_FLOATING_POINT_LITERAL_in_constant1681 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_constant_in_primary_expression1711 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_130_in_primary_expression1716 = new BitSet(new long[]{0x501001E080100030L,0x30080411D8290801L,0x0000000000000054L});
    public static final BitSet FOLLOW_expression_in_primary_expression1718 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000008L});
    public static final BitSet FOLLOW_131_in_primary_expression1720 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_function_call_in_primary_expression1725 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_IDENTIFIER_in_primary_expression1730 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000080L});
    public static final BitSet FOLLOW_135_in_primary_expression1732 = new BitSet(new long[]{0x4000000000000000L});
    public static final BitSet FOLLOW_c_function_call_in_primary_expression1734 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_IDENTIFIER_in_primary_expression1751 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_set_in_unary_expression1771 = new BitSet(new long[]{0x501001E080100030L,0x30080411D8290801L,0x0000000000000054L});
    public static final BitSet FOLLOW_unary_expression_in_unary_expression1777 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_unary_operator_in_unary_expression1782 = new BitSet(new long[]{0x501001E080100030L,0x30080411D8290801L,0x0000000000000054L});
    public static final BitSet FOLLOW_cast_expression_in_unary_expression1784 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_primary_expression_in_unary_expression1789 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000000L,0x0000000000001050L});
    public static final BitSet FOLLOW_postfix_expression_in_unary_expression1791 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000000L,0x0000000000001050L});
    public static final BitSet FOLLOW_140_in_postfix_expression1804 = new BitSet(new long[]{0x501001E080100030L,0x30080411D8290801L,0x0000000000000054L});
    public static final BitSet FOLLOW_expression_in_postfix_expression1806 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000002000L});
    public static final BitSet FOLLOW_141_in_postfix_expression1808 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_132_in_postfix_expression1813 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_134_in_postfix_expression1818 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_140_in_declaration_sufix1867 = new BitSet(new long[]{0x1010010080000000L,0x0000040000200000L});
    public static final BitSet FOLLOW_constant_in_declaration_sufix1869 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000002000L});
    public static final BitSet FOLLOW_141_in_declaration_sufix1871 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_c_var_declaration_in_var_declaration1891 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000001400L});
    public static final BitSet FOLLOW_declaration_sufix_in_var_declaration1893 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000001400L});
    public static final BitSet FOLLOW_138_in_var_declaration1896 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_shared_var_declaration_in_var_declaration1919 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000400L});
    public static final BitSet FOLLOW_138_in_var_declaration1921 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_type_declaration_in_c_var_declaration1945 = new BitSet(new long[]{0x4000000000000000L});
    public static final BitSet FOLLOW_var_names_in_c_var_declaration1947 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_SHARED_in_shared_var_declaration1959 = new BitSet(new long[]{0x4009880860080000L,0x0E120AC82000400CL});
    public static final BitSet FOLLOW_type_declaration_in_shared_var_declaration1961 = new BitSet(new long[]{0x4000000000000000L});
    public static final BitSet FOLLOW_var_names_in_shared_var_declaration1963 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000000L,0x0000000000001000L});
    public static final BitSet FOLLOW_declaration_sufix_in_shared_var_declaration1965 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000000L,0x0000000000001000L});
    public static final BitSet FOLLOW_IDENTIFIER_in_var_names1991 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000000L,0x0000000000000020L});
    public static final BitSet FOLLOW_133_in_var_names1994 = new BitSet(new long[]{0x4000000000000000L});
    public static final BitSet FOLLOW_IDENTIFIER_in_var_names1996 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000000L,0x0000000000000020L});
    public static final BitSet FOLLOW_type_in_type_declaration2019 = new BitSet(new long[]{0x4009880860080002L,0x0E1002C82000400DL});
    public static final BitSet FOLLOW_INDIRECTION_in_type_declaration2022 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000001L});
    public static final BitSet FOLLOW_struct_declaration_in_type_declaration2040 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ENUM_in_enum_declaration2059 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000004000L});
    public static final BitSet FOLLOW_142_in_enum_declaration2061 = new BitSet(new long[]{0x4000000000000000L});
    public static final BitSet FOLLOW_enumerator_list_in_enum_declaration2063 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000008000L});
    public static final BitSet FOLLOW_143_in_enum_declaration2065 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ENUM_in_enum_declaration2070 = new BitSet(new long[]{0x4000000000000000L});
    public static final BitSet FOLLOW_IDENTIFIER_in_enum_declaration2072 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000004000L});
    public static final BitSet FOLLOW_142_in_enum_declaration2074 = new BitSet(new long[]{0x4000000000000000L});
    public static final BitSet FOLLOW_enumerator_list_in_enum_declaration2076 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000008000L});
    public static final BitSet FOLLOW_143_in_enum_declaration2078 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ENUM_in_enum_declaration2084 = new BitSet(new long[]{0x4000000000000000L});
    public static final BitSet FOLLOW_IDENTIFIER_in_enum_declaration2086 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_enumerator_in_enumerator_list2100 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000000L,0x0000000000000020L});
    public static final BitSet FOLLOW_133_in_enumerator_list2103 = new BitSet(new long[]{0x4000000000000000L});
    public static final BitSet FOLLOW_enumerator_in_enumerator_list2105 = new BitSet(new long[]{0x0000000000000002L,0x0000000000000000L,0x0000000000000020L});
    public static final BitSet FOLLOW_IDENTIFIER_in_enumerator2118 = new BitSet(new long[]{0x0000000000001002L});
    public static final BitSet FOLLOW_ASGN_EQUAL_in_enumerator2121 = new BitSet(new long[]{0x1010010080000000L,0x0000040000200000L});
    public static final BitSet FOLLOW_constant_expression_in_enumerator2123 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_struct_or_union_in_struct_declaration2154 = new BitSet(new long[]{0x4000000000000000L,0x0000000000000000L,0x0000000000004000L});
    public static final BitSet FOLLOW_IDENTIFIER_in_struct_declaration2156 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000004000L});
    public static final BitSet FOLLOW_142_in_struct_declaration2159 = new BitSet(new long[]{0x4009880860080000L,0x0E120AC82000400CL});
    public static final BitSet FOLLOW_struct_member_list_in_struct_declaration2161 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000008000L});
    public static final BitSet FOLLOW_143_in_struct_declaration2163 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_struct_or_union_in_struct_declaration2168 = new BitSet(new long[]{0x4000000000000000L});
    public static final BitSet FOLLOW_IDENTIFIER_in_struct_declaration2170 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_struct_member_in_struct_member_list2182 = new BitSet(new long[]{0x4009880860080002L,0x0E120AC82000400CL});
    public static final BitSet FOLLOW_type_declaration_in_struct_member2194 = new BitSet(new long[]{0x4000000000000000L});
    public static final BitSet FOLLOW_IDENTIFIER_in_struct_member2196 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000000L,0x0000000000000400L});
    public static final BitSet FOLLOW_138_in_struct_member2198 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_type_modifier_in_type2228 = new BitSet(new long[]{0x4009080860080000L,0x0E1002C02000400CL});
    public static final BitSet FOLLOW_generic_type_in_type2231 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_cpar_type_in_type2236 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_VOID_in_generic_type2290 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_CHAR_in_generic_type2295 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_SHORT_in_generic_type2300 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_INT_in_generic_type2305 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_LONG_in_generic_type2310 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_FLOAT_in_generic_type2315 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_DOUBLE_in_generic_type2320 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_SIGNED_in_generic_type2325 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_UNSIGNED_in_generic_type2330 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_W64_in_generic_type2335 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_INT64_in_generic_type2340 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_type_id_in_generic_type2345 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_IDENTIFIER_in_type_id2364 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_SEMAPH_in_cpar_type2384 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_EVENT_in_cpar_type2396 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_var_declaration_in_synpred2_SCPAR162 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_c_function_in_synpred4_SCPAR172 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_main_function_in_synpred5_SCPAR177 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_var_declaration_in_synpred17_SCPAR538 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_function_call_in_synpred20_SCPAR586 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_assignment_expression_in_synpred22_SCPAR604 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_expression_in_synpred30_SCPAR695 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ELSE_in_synpred34_SCPAR842 = new BitSet(new long[]{0xD07005E180100030L,0xB0080413DA290801L,0x0000000000004454L});
    public static final BitSet FOLLOW_statement_in_synpred34_SCPAR844 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_133_in_synpred54_SCPAR1266 = new BitSet(new long[]{0x501001E080100030L,0x30080411D8290801L,0x0000000000000054L});
    public static final BitSet FOLLOW_assignment_expression_in_synpred54_SCPAR1268 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_lvalue_in_synpred55_SCPAR1286 = new BitSet(new long[]{0x000000000007FF00L});
    public static final BitSet FOLLOW_assignment_operator_in_synpred55_SCPAR1288 = new BitSet(new long[]{0x501001E080100030L,0x30080411D8290801L,0x0000000000000054L});
    public static final BitSet FOLLOW_assignment_expression_in_synpred55_SCPAR1290 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_operator_in_synpred57_SCPAR1353 = new BitSet(new long[]{0x501001E080100030L,0x30080411D8290801L,0x0000000000000054L});
    public static final BitSet FOLLOW_cast_expression_in_synpred57_SCPAR1355 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_130_in_synpred76_SCPAR1467 = new BitSet(new long[]{0x4000000000000000L,0x0000000000000001L});
    public static final BitSet FOLLOW_131_in_synpred76_SCPAR1476 = new BitSet(new long[]{0x501001E080100030L,0x30080411D8290801L,0x0000000000000054L});
    public static final BitSet FOLLOW_cast_expression_in_synpred76_SCPAR1478 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_function_call_in_synpred94_SCPAR1725 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_postfix_expression_in_synpred99_SCPAR1791 = new BitSet(new long[]{0x0000000000000002L});

}